美文网首页程序员iOS程序猿iOS Developer
iOS网络编程(三):请求类NSURLRequest和请求响应类

iOS网络编程(三):请求类NSURLRequest和请求响应类

作者: Andy_Ron | 来源:发表于2017-09-19 02:00 被阅读1747次

    NSURLSession和NSURLConnection框架,网络请求都是通过NSURLRequest类发起的。

    NSURLRequest请求类除了在初始化时可以设定一些属性,创建出来后则大部分属性都为只读的,无法设置与修改。NSMutableURLRequest相对而言可以更加灵活的设置请求的相关属性(属性修饰符变化),其他方面没有多少区别。

    一、NSURLRequest类中常用方法和属性

    类方法:

    // 创建的请求对象 默认使用NSURLRequestUseProtocolCachePolicy缓存逻辑 默认请求超时时限为60s
    + (instancetype)requestWithURL:(NSURL *)URL;
    
    // 创建的请求对象 创建时设置缓存逻辑和超时时限
    + (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
    

    实例方法:

    // init方法进行对象的创建 默认使用NSURLRequestUseProtocolCachePolicy缓存逻辑 默认请求超时时限为60s
    - (instancetype)initWithURL:(NSURL *)URL;
    
    // init方法进行对象的创建
    - (instancetype)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
    

    属性:

    // 判断是否支持安全编码
    @property (class, readonly) BOOL supportsSecureCoding;
    
    // 只读属性 获取请求对象的URL
    @property (nullable, readonly, copy) NSURL *URL;
    
    // 只读属性 缓存策略
    @property (readonly) NSURLRequestCachePolicy cachePolicy;
    
    //只读属性 获取请求的超时时限
    @property (readonly) NSTimeInterval timeoutInterval;
    
    //主文档地址 这个地址用来存放缓存
    @property (nullable, readonly, copy) NSURL *mainDocumentURL;
    
    // 获取网络请求的服务类型
    @property (readonly) NSURLRequestNetworkServiceType networkServiceType;
    
    //获取是否允许使用服务商蜂窝网络
    @property (readonly) BOOL allowsCellularAccess;
    
    

    缓存策略NSURLRequestCachePolicy:

    typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
    {
    
        //默认的缓存协议
    
        NSURLRequestUseProtocolCachePolicy = 0,
    
        //无论有无本地缓存数据 都进行从新请求
    
        NSURLRequestReloadIgnoringLocalCacheData = 1,
    
        //忽略本地和远程的缓存数据 未实现的策略
    
        NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, 
    
        //无论有无缓存数据 都进行从新请求
    
        NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    
        //先检查缓存 如果没有缓存再进行请求
    
        NSURLRequestReturnCacheDataElseLoad = 2,
    
        //类似离线模式,只读缓存 无论有无缓存都不进行请求
    
        NSURLRequestReturnCacheDataDontLoad = 3,
    
        //未实现的策略
    
        NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
    };
    

    网络请求的服务类型枚举NSURLRequestNetworkServiceType:

    typedef NS_ENUM(NSUInteger, NSURLRequestNetworkServiceType)
    {
    
        NSURLNetworkServiceTypeDefault = 0,   // Standard internet traffic
    
        NSURLNetworkServiceTypeVoIP = 1,  // Voice over IP control traffic
    
        NSURLNetworkServiceTypeVideo = 2, // Video traffic
    
        NSURLNetworkServiceTypeBackground = 3, // Background traffic
    
        NSURLNetworkServiceTypeVoice = 4     // Voice data
    };
    

    二、与HTTP/HTTPS协议相关请求的属性和方法

    这些属性属于NSMutableURLRequest:

    // HPPT请求方式 默认为“GET”
    @property (copy) NSString *HTTPMethod;
    
    //通过字典设置HTTP请求头的键值数据
    @property (nullable, copy) NSDictionary<NSString *, NSString *> *allHTTPHeaderFields;
    
    //设置http请求头中的字段值
    - (void)setValue:(nullable NSString *)value forHTTPHeaderField:(NSString *)field;
    
    //向http请求头中添加一个字段
    - (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field;
    
    //设置http请求体 用于POST请求
    @property (nullable, copy) NSData *HTTPBody;
    
    //设置http请求体的输入流
    @property (nullable, retain) NSInputStream *HTTPBodyStream;
    
    //设置发送请求时是否发送cookie数据
    @property BOOL HTTPShouldHandleCookies;
    
    //设置请求时是否按顺序收发 默认禁用 在某些服务器中设为YES可以提高网络性能
    @property BOOL HTTPShouldUsePipelining;
    

    三、NSURLResponse

    网络请求成功后,服务器响应信息会存存放在NSURLResponse和其子类NSHTTPURLResponse中:

    //请求的URL地址
    @property (nullable, readonly, copy) NSURL *URL;
    
    //返回数据的数据类型
    @property (nullable, readonly, copy) NSString *MIMEType;
    
    //获取返回数据的内容长度
    @property (readonly) long long expectedContentLength;
    
    //获取返回数据的编码方式
    @property (nullable, readonly, copy) NSString *textEncodingName;
    
    //返回拼接的数据文件名 以url为名 数据没醒MIMEType为扩展名
    @property (nullable, readonly, copy) NSString *suggestedFilename;
    
    //请求的状态码
    @property (readonly) NSInteger statusCode;
    
    //请求头中所有的字段
    @property (readonly, copy) NSDictionary *allHeaderFields;
    

    参考:iOS网络编程之四——请求类NSURLRequest使用详解
    iOS网络编程之五——请求回执类NSURLResponse属性简介

    相关文章

      网友评论

        本文标题:iOS网络编程(三):请求类NSURLRequest和请求响应类

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