NSURL、NSURLRequest、NSURLConnection、NSURLResponse
/*** DEPRECATED: The NSURLConnection class should no longer be used. NSURLSession is the replacement for NSURLConnection ***/
1.NSURL
可以通过NSURL轻松管理URL值,并访问URL指向的资源。NSURL可以指向文件资源也可指向网络资源
NSURL 对象是不可变的,无法先构建空的NSURL对象,然后通过调用对象的赋值方法来装配其属性,如果实例化NSURL对象的字符串为不合法,则返回nil,进行网络前,应该先验证URL对象的正确性
2.NSURLRequest
NSURLRequest对象包含加载URL内容所需的信息
NSURLRequest 类创建方法 + (instancetype)requestWithURL:(NSURL *)URL;
如果URL为http/s,那么请求方法是GET,超时时间60s,采用URL协议指定的请求缓存规则。
NSURLRequest 类是不可变的,无法生成后修改属性
\+ (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
当需要修改非URL,超时时间,缓存策略时。需要使用NSMutableURLRequest类
例如:
NSURL *url = [NSURL URLWithString:@"https://www.lmlc.com/login/m"];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:@"POST"];
[req setHTTPBody:[@"POST body" dataUsingEncoding:NSUTF8StringEncoding]];
//NSInputStream *instream = [NSInputStream inputStreamWithData:[@"POST body" dataUsingEncoding:NSUTF8StringEncoding]];
//[req setHTTPBodyStream:instream];
在向NSURLRequest设置Body是可以通过两种形式:1.在内存中 2.通过NSInputStream
3.NSURLConnection
NSURLConnection对象是URL加载系统活动的中心,提供的接口不多,提供用于初始化、开启与取消连接的方法
NSURLConnection类通过三种不同的操作模式来执行HTTP/s请求,同步、异步与队列式异步
同步请求
+ (nullable NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse * _Nullable * _Nullable)response error:(NSError **)error NS_DEPRECATED(10_3, 10_11, 2_0, 9_0, "Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLSession.h") __WATCHOS_PROHIBITED;
队列式异步
+ (void)sendAsynchronousRequest:(NSURLRequest*) request
queue:(NSOperationQueue*) queue
completionHandler:(void (^)(NSURLResponse* _Nullable response, NSData* _Nullable data, NSError* _Nullable connectionError)) handler NS_DEPRECATED(10_7, 10_11, 5_0, 9_0, "Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLSession.h") __WATCHOS_PROHIBITED;
异步请求
主要通过代理实现,引入两个类,NSURLConnectionDelegate与NSURLConnectionDateDelegate
异步请求与运行循环
异步请求需要运行循环。当数据传递到服务器或是被客户端接受时,运行循环用于实现事件与委托对象之间的通信。异步请求在发出时,会在当前线程的运行循环上操作,注意的是通过GCD或NSOperationQueue创建的线程没有运行循环
关于运行循环参考(http://www.jianshu.com/p/d260d18dd551)
4.NSURLResponse
NSURLRequest 对象会在URL加载请求完毕后返回。如果请求有问题或是客户端无法连接到服务器,会产生NSError对象
NSURLResponse 常见的属性
NSURL 返回内容的URL,由于重定向和标准化等原因,该URL可能与请求提供的URL不同
MimeType 结果数据的MIME类型,该值来源于服务器,如果客户端框架认为服务器有错,可以修改,如果服务器没有提供,还可以有客户端框架提供
expectedContentLength 该值可能发挥,也可能不返回,返回值可能与实际返回内容的实际大小不同。如果返回内容大小未知,那么该值将为unkonwLength
textEncodingName 响应中文本采用的编码,如果没有编码返回nil
NSHTTPURLResponse 为NSURLResponse子类,包含HTTP请求的属性,该类对于确定HTTP请求的结果是必须的。
statusCode 状态码
allHeaderFields 响应头,返回的值为字典。
网友评论