美文网首页
IOS 网络请求高层API

IOS 网络请求高层API

作者: TaoGeNet | 来源:发表于2017-09-13 19:37 被阅读52次

    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 响应头,返回的值为字典。

    相关文章

      网友评论

          本文标题:IOS 网络请求高层API

          本文链接:https://www.haomeiwen.com/subject/ofslsxtx.html