NSURLRequest

本文详细介绍了NSURLRequest的使用,包括设置超时时间、请求方法、请求体、请求头,以及缓存策略。特别指出,对于设置参数,需要使用NSMutableURLRequest。还探讨了HTTP的GET与POST方法的区别,并提及NSURLConnection在数据传递中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

从本篇开始,我开始全面而系统的研究下ios的网络知识,网络其实我们主要研究的时应用层的HTTP协议以及HTTPS协议,至于其他的应用层,例如XMPP等等,都不在讨论范围内。

那么,我们讲解的主要知识,从NSURLRequest--->NSURLConnection---->NSURLSession

Let's Begin!

NSURLRequest

常用方法

设置请求超时等待时间(超过这个时间就算超时,请求失败)- (void)setTimeoutInterval:(NSTimeInterval)seconds;
设置请求方法(比如GET和POST)- (void)setHTTPMethod:(NSString *)method;
设置请求体- (void)setHTTPBody:(NSData *)data;
设置请求头- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
但是注意,NSUrlRequest 不能设置参数,只有读取的权限,如果要设置这些参数,需要使用NSURLRequest的子类 NSMutableURLRequest
其中有些不常用的参数
设置是否使用蜂窝数据(默认是YES)allowsCellularAccess
设置使用HTTP主体流 HTTPBodyStream


我们看下面这种初始化方法,其中包含了缓存参数
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"] 
cachePolicy:NSURLRequestUseProtocolCachePolicy 
timeoutInterval:60.0]; 


NSURLRequest默认的cache policy是NSURLRequestUseProtocolCachePolicy, 是最能保持一致性的协议。
NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载
NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载
NSURLRequestReturnCacheDataDontLoad 允许app确定是否要返回cache数据,如果使用这种协议当本地不存在response的时候,创建         NSURLConnection or NSURLDownload实例时将会马上返回nil;这类似于离线模式,没有建立网络连接


重点:

可能我们平时,比较不关注的内容:比如Httpfield 和HttpBody 是为何存在的。
首先如上所讲,我们可以设置HTTP的请求方法,比如get或者post,默认IOS如果不设置的话,那就是Get方法
,看看区别吧
GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;
POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

        如果,你要详细理解这两者之间的区别,请看我的另外一篇文章:http://blog.youkuaiyun.com/shidongdong2012/article/details/43759929点击打开链接

        现在,你基本了解了request其实就是对于一个请求体的封装,其中包括了一些参数,比如请求地址,请求的一些信息,类型进行了设置,并没有真正的开始与host进行实际的数据传递。那数据传递需要什么呢?

NSURLConnection

对于建立连接,必要的参数就是我们前面讲到的NSURLRequest
对于网络请求,有同步和异步的区分,先看看同步的方法
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

+ (void)sendAsynchronousRequest:(NSURLRequest*) request
                          queue:(NSOperationQueue*) queue
              completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler NS_AVAILABLE(10_7, 5_0);

以上两个是同步方法,需要阻塞请求,但是有所不同,下面的方法,可以放到子线程上请求,数据返回也采用更方便的block方式,一旦阻塞请求我们很少用,因为严重影响了用户体验。看看异步请求吧。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值