网络请求主要有GET请求和POST请求两种。

两种请求的演示:

ios请求shsh ios 请求_get


GET:
--GET的语义是获取指定URL上的资源
--将数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,各个变量之间使用“&”连接
--不安全,因为在传输过程中,数据被放在请求的URL中
传输的数据量小,这主要是因为受URL长度限制
POST:
--POST的语意是对指定资源“追加/添加”数据
--将数据放在数据体中,按照变量和值相对应的方式,传递到action所指向URL
--所有数据对用户来说不可见
--可以传输大量数据,上传文件只能使用Post

网络访问的四个步骤:

第一步:确定地址——URL
第二步:建立请求
第三步:开始连接
(等待网络处理中……)
第四步:连接完成,处理结果

IOS网络处理常用类

NSURL(地址)
--请求地址
NSURLRequest(请求,GET请求使用)
--保存需要传送给Web服务器的全部数据:
*一个NSURL对象
*缓存策略
*等待Web服务器响应的最长时间
*请求头
*请求体
NSMutableURLRequest(可变请求,POST请求使用)
--NSURLRequest的可修改子类
NSURLConnection(连接)
--负责创建客户端和Web服务器之间的网络连接、发送NSURLRequest对象中的数据并收集来自服务器的响应

NSURLConnectionDataDelegate的常用代理方法

所以使用代理方法,是因为要处理请求返回的结果!
// 服务器开始返回数据
(void)connection:didReceiveResponse:
// 收到服务器返回的数据,本方法会被调用多次
- (void)connection:didReceiveData:
// 数据接收完毕,做数据的最后处理
(void)connectionDidFinishLoading:
// 网络连接错误
- (void)connection:didFailWithError:
// 发送数据给服务器,POST 请求使用此方法
- (void)connection:didSendBodyData:totalBytesWritten: totalBytesExpectedToWrite:

GET请求步骤——1. 地址 2.请求 3.连接

ios请求shsh ios 请求_ios_02

POST请求步骤(定义/启动Connection部分省略)

ios请求shsh ios 请求_网络请求_03

同步请求和异步请求:

NSURLConnection提供了两个静态方法可以直接同步或异步调用NSURLRequest,而无需通过NSURLConnectionDataDelegate获取数据
同步请求:
sendSynchronousRequest:request returningResponse:&response error:&error
异步请求:
sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)

示例代码:

ios请求shsh ios 请求_网络请求_04


ios请求shsh ios 请求_ios_05

ios请求shsh ios 请求_ios_06

缓存策略

NSURLRequest的cachePolicy属性可以设置缓存策略,这是一种内存缓存,非硬盘缓存
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,使程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求
cachePolicy支持的缓存策略包括:
--NSURLRequestUseProtocolCachePolicy 默认的缓存策略,要在协议的实现方法中指定缓存逻辑
--NSURLRequestReloadIgnoringCacheData 忽略缓存从原始地址下载
--NSURLRequestReturnCacheDataElseLoad 没有缓存时从原始地址下载
--NSURLRequestReturnCacheDataDontLoad 只使用缓存,如果不存在缓存,请求失败,适用于没有建立网络连接离线模式
--NSURLRequestReloadIgnoringLocalAndRemoteCacheData 忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似
--NSURLRequestReloadRevalidatingCacheData 验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据