IOS之同步请求、异步请求、GET请求、POST请求(转)
1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,
2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行
3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;
4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。
001
|
1、 同步GET请求
|
002
|
003
|
//第一步,创建URL
|
004
|
005
|
NSURL *url = [NSURL URLWithString:@ "http://api.hudong.com/iphonexml.do?type=focus-c" ];
|
006
|
007
|
|
008
|
009
|
//第二步,通过URL创建网络请求
|
010
|
011
|
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
|
012
|
013
|
//NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
|
014
|
015
|
其中缓存协议是个枚举类型包含:
|
016
|
017
|
NSURLRequestUseProtocolCachePolicy(基础策略)
|
018
|
019
|
NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
|
020
|
021
|
NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
|
022
|
023
|
NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
|
024
|
025
|
NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
|
026
|
027
|
NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
|
028
|
029
|
//第三步,连接服务器
|
030
|
031
|
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
|
032
|
033
|
|
034
|
035
|
NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
|
036
|
037
|
|
038
|
039
|
NSLog(@ "%@" ,str);
|
040
|
041
|
2、同步POST请求
|
042
|
043
|
//第一步,创建URL
|
044
|
045
|
NSURL *url = [NSURL URLWithString:@ "http://api.hudong.com/iphonexml.do" ];
|
046
|
047
|
//第二步,创建请求
|
048
|
049
|
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
|
050
|
051
|
[request setHTTPMethod:@ "POST" ]; //设置请求方式为POST,默认为GET
|
052
|
053
|
NSString *str = @ "type=focus-c" ; //设置参数
|
054
|
055
|
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
|
056
|
057
|
[request setHTTPBody:data];
|
058
|
059
|
//第三步,连接服务器
|
060
|
061
|
|
062
|
063
|
NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
|
064
|
065
|
|
066
|
067
|
NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
|
068
|
069
|
|
070
|
071
|
NSLog(@ "%@" ,str1);
|
072
|
3、异步GET请求
|
073
|
074
|
//第一步,创建url
|
075
|
076
|
NSURL *url = [NSURL URLWithString:@ "http://api.hudong.com/iphonexml.do?type=focus-c" ];
|
077
|
078
|
//第二步,创建请求
|
079
|
080
|
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
|
081
|
082
|
//第三步,连接服务器
|
083
|
084
|
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
|
085
|
4、异步POST请求
|
086
|
087
|
//第一步,创建url
|
088
|
089
|
NSURL *url = [NSURL URLWithString:@ "http://api.hudong.com/iphonexml.do" ];
|
090
|
091
|
//第二步,创建请求
|
092
|
093
|
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
|
094
|
095
|
[request setHTTPMethod:@ "POST" ];
|
096
|
097
|
NSString *str = @ "type=focus-c" ;
|
098
|
099
|
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
|
100
|
101
|
[request setHTTPBody:data];
|
102
|
103
|
//第三步,连接服务器
|
104
|
105
|
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
|
106
|
107
|
5、异步请求的代理方法
|
108
|
109
|
//接收到服务器回应的时候调用此方法
|
110
|
111
|
- ( void )connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
|
112
|
113
|
{
|
114
|
115
|
NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
|
116
|
117
|
NSLog(@ "%@" ,[res allHeaderFields]);
|
118
|
119
|
self.receiveData = [NSMutableData data];
|
120
|
121
|
|
122
|
123
|
|
124
|
125
|
}
|
126
|
127
|
//接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
|
128
|
129
|
-( void )connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
|
130
|
131
|
{
|
132
|
133
|
[self.receiveData appendData:data];
|
134
|
135
|
}
|
136
|
137
|
//数据传完之后调用此方法
|
138
|
139
|
-( void )connectionDidFinishLoading:(NSURLConnection *)connection
|
140
|
141
|
{
|
142
|
143
|
NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
|
144
|
145
|
NSLog(@ "%@" ,receiveStr);
|
146
|
147
|
}
|
148
|
149
|
//网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
|
150
|
151
|
-( void )connection:(NSURLConnection *)connection
|
152
|
153
|
didFailWithError:(NSError *)error
|
154
|
155
|
{
|
156
|
157
|
NSLog(@ "%@" ,[error localizedDescription]);
|
转载于:https://www.cnblogs.com/li-baibo/p/3765409.html
IOS之同步请求、异步请求、GET请求、POST请求(转)相关推荐
- iOS网络--同步,异步下载数据
一. 这一节我们来学习几种下载数据的方式,目的在于学习同步,异步下载数据的知识. 二. 1.直接同步下载数据 //直接下载 同步下载 阻塞主线程 NSURL * url = [NSURL URLWit ...
- iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group
同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...
- 一文读懂并发与并行,同步与异步阻塞
并发与并行 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法, 实现用多个任务"一起"执行(实际上总有一些任务不在执行,因为切换任务的速度相当快, 看上去一起执行而 ...
- 同步与异步,回调与协程
目录 概念上下文: 同步的方式: 异步加回调的方式: 异步协程方式: 总结: 这里分享一个 协程原理到实现,全局分析丨协程的切换与调度视频点击查看:「链接」 正文 本文主要介绍在网络请求中的同步与异步 ...
- iOS网络开发中的同步、异步和请求队列
在iOS网络编程中,我们经常会遇到线程的同步和异步问题,同时为了对异步请求更加精准丰富的控制,我们还常常在iOS中使用请求队列,下面就来谈谈iOS开发中同步.异步以及请求队列的使用方法. 1. 同步意 ...
- iOS网络编程之同步、异步、请求队列
1. 同步意为着线程阻塞,在主线程中使用此方法会不响应任何用户事件.所以,在应用程序设计时,大多被用在专门的子线程增加用户体验,或用异步请求代替. - (IBAction)grabURL:(id)se ...
- http 请求 与其同步与异步请求的通透讲解
http请求可以是基于webkit的浏览器或者web组件如:webview(在移动平台,android iOS等)发送的:也可以是任何程序或者代码段发出的:也可以这么说任何程序都可以自主发送http. ...
- OkHttpClient源码分析(一)—— 同步、异步请求分析和Dispatcher的任务调度
OkHttpClient同步请求的执行流程和源码分析 同步请求示例 OkHttpClient okHttpClient = new OkHttpClient.Builder().readTimeout ...
- 【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...
- 简述http请求中的同步和异步
以http请求为例,同步请求就是指浏览器在处理完这个请求之前不能够接收其他请求; 异步请求就是指浏览器没处理完这个请求之前还可以接收用户的其他请求或者交互操作. http请求方式,分为GET与POST ...
最新文章
- 为什么我会重回到Windows的怀抱?
- zts在c语言中的意思,C语言入门-全局变量 - osc_wna7tzts的个人空间 - OSCHINA - 中文开源技术交流社区...
- 常用计算机主要硬件设备,个人计算机常用的输出设备41.计算机硬件的组成部分主要包括:...
- python 斐波那契数列
- 做好计划事半功倍论文_Picocli 2.0:事半功倍
- sublime编辑器无法正常打印中文问题解决
- 非结构化文件转移服务器,非结构化数据存储管理方法,服务器和系统 Unstructured data storage management method, and a system server...
- ionic开发记账软件《易跟金》
- P1598 垂直柱状图C++
- HTML制作宣传片,怎么制作视频宣传片 视频宣传片制作软件 照片制作成宣传视频,并添加相关文字说明...
- 论文阅读笔记(1):Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation
- csp-202203
- 简单对数不等式的证明
- win10性能选项让计算机,一招开启win10“最强”模式,让你的电脑性能急速飙升!...
- 定形相变复合材料热性能标准测试方法及其改进
- 使用php for循环实现一个阶梯式九九乘法表
- php python uwsgi,python,uwsgi_uwsgi 安装报错,python,uwsgi - phpStudy
- Mysql数据库(3)
- docker 容器启动失败:Could not attach to network
- 【python函数】
热门文章
- hadoop使用mapreduce统计词频_深圳嘉华学校之Hadoop简介(什么是Map-Reduce-Mapreduce-about云开发)...
- 单片机c语言编程300例_趣味c语言编程100例(四)
- 计算机中iis6.0配置步骤,Win2003 IIS6.0 安装方法 图文详细教程
- go 函数参数nil_深入理解 Go-Defer的机制
- b+树时间复杂度_深入理解数据库系统之存储存引擎(二叉搜索树)
- 自拟计算机作文100字,玩电脑作文100字胡佳慧
- matlab电路环流,基于MATLAB的单芯电缆金属护套环流分析研究
- np实现sigmoid_使用numpy实现一个深度学习框架
- C++知识点36——使用智能指针的注意事项(下)
- C++知识点12——构造函数初步