iOS NSURLRequest&&NSURLResponse解读

NSURLRequest.h

NSURLRequest
  • NSURLRequest 对象代表独立于协议的URL加载请求。

  • NSURLRequest 封装了加载请求的两个基本元素: URL,缓存策略。

  • NSURLRequest 可以通过添加 category 来支持其他的协议,使用 NSURLProtocol 的 propertyForKey:inRequest: 方法和setProperty:forKey:inRequest: 方法,可以访问属性对象的协议值。

  • NSURLRequest 对应的可变类为 NSMutableURLRequest。

  • 创建请求

  • requestWithURL:
    – initWithURL:
  • requestWithURL:cachePolicy:timeoutInterval:
    – initWithURL:cachePolicy:timeoutInterval:

获取请求属性
– cachePolicy
– HTTPShouldUsePipelining
– mainDocumentURL
– timeoutInterval
– networkServiceType
– URL

获取HTTP请求属性
– allHTTPHeaderFields
– HTTPBody
– HTTPBodyStream
– HTTPMethod
– HTTPShouldHandleCookies
– valueForHTTPHeaderField:

类方法
requestWithURL:
创建并返回使用 默认缓存策略 + 默认超时时间 + 指定URL 的请求。

  • (id)requestWithURL:(NSURL *)theURL
    theURL: 请求的URL
    返回值: 新建的URL请求。
    默认的缓存策略是 NSURLRequestUseProtocolCachePolicy 。
    默认的超时时间是 60s。

requestWithURL:cachePolicy:timeoutInterval:
创建并返回使用 指定缓存策略 + 指定超时时间 + 指定URL 的请求。

  • (id)requestWithURL:(NSURL *)theURL
    cachePolicy:(NSURLRequestCachePolicy)cachePolicy
    timeoutInterval:(NSTimeInterval)timeoutInterval
    theURL: 请求的URL
    cachePolicy: 请求的缓存策略
    timeoutInterval: 请求的超时时间,以秒为单位。
    返回值: 新建的URL请求

实例方法

allHTTPHeaderFields

  • (NSDictionary *)allHTTPHeaderFields
    返回值: 包含HTTP头所有字段的字典

allowsCellularAccess

  • (BOOL)allowsCellularAccess
    返回值: YES蜂窝数据可用,NO蜂窝数据不可用。

cachePolicy

  • (NSURLRequestCachePolicy)cachePolicy
    返回值: 该请求使用的缓存策略。

HTTPBody

  • (NSData *)HTTPBody
    返回值: 请求体。

HTTPBodyStream

  • (NSInputStream *)HTTPBodyStream
    返回值: 请求的输入流。如果未设置,则返回nil。这个流只能用来检验,其他操作都是不可靠的。
    一个请求要么设置了请求体(HTTP Body),要么设置了输入流(HTTP Body Stream),只能设置一个。
    输入流在复制NSURLRequest对象时被保留,但是用NSCoding协议归档的时候将丢失。

HTTPMethod

  • (NSString *)HTTPMethod
    返回值:请求方法。 默认是“GET”
    HEAD - 只传递头信息,没有请求体,也没有响应体。
    GET - 查询资源
    PUT - 新增资源
    POST - 更新资源
    DELETE - 删除资源

HTTPShouldHandleCookies

  • (BOOL)HTTPShouldHandleCookies
    返回值: YES 使用默认cookie处理,NO不使用。
    默认值为YES。

HTTPShouldUsePipelining
返回在接到上一个请求的响应之前,是否需要传输数据。

  • (BOOL)HTTPShouldUsePipelining
    返回值: YES 传输,NO 不传输。

initWithURL:
初始化使用 默认缓存策略 + 默认超时时间 + 指定URL 的请求。

  • (id)initWithURL:(NSURL *)theURL
    theURL: 请求的URL
    返回值: 新建的URL请求。
    默认的缓存策略是 NSURLRequestUseProtocolCachePolicy 。
    默认的超时时间是 60s。

initWithURL:cachePolicy:timeoutInterval:
初始化使用 指定缓存策略 + 指定超时时间 + 指定URL 的请求。

  • (id)initWithURL:(NSURL *)theURL
    cachePolicy:(NSURLRequestCachePolicy)cachePolicy
    timeoutInterval:(NSTimeInterval)timeoutInterval
    theURL: 请求的URL
    cachePolicy: 请求的缓存策略
    timeoutInterval: 请求的超时时间,以秒为单位。
    返回值: 新建的URL请求

mainDocumentURL

  • (NSURL *)mainDocumentURL
    返回值: 请求对应URL的主文档。

networkServiceType

  • (NSURLRequestNetworkServiceType)networkServiceType
    返回值: 网络服务类型。
    网络服务类型给操作系统提示底层通信的作用。这个提示有助于系统优化通信,确定唤醒蜂窝数据或者WIFI的速度。调节不同的参数,可以平衡电池、性能以及其他因素。
    比如,进行非用户请求的下载时应该使用 NSURLNetworkServiceTypeBackground。 比如,在后台提前加载数据,这样等用户需要看时就不需要加载了。

supportsSecureCoding
表明 NSURLRequest 是否实现了 NSSecureCoding 协议。

  • (BOOL)supportsSecureCoding
    返回值: YES 实现了 NSSecureCoding 协议,NO未实现。

timeoutInterval

  • (NSTimeInterval)timeoutInterval
    返回值: 请求的超时时间,单位秒。

URL

  • (NSURL *)URL

valueForHTTPHeaderField:

  • (NSString *)valueForHTTPHeaderField:(NSString *)field
    field: 头字段的名字。 忽略大小写。
    返回值: 头字段的值,如果没有该字段,则返回nil。
NSMutableURLRequest

概述

NSMutableURLRequest 是 NSURLRequest 的子类。多个请求时,可以只创建一个可变对象,而不需要为每一个加载创建一个不可变的 NSURLRequest 对象。
NSURLSession,NSURLConnection 和 NSURLDownload 类初始化时对 NSMutableURLRequest 对象是进行的深度复制。

注意: 这个类只是封装URL请求的信息。 要真正发出请求,需要使用其他的类,比如NSURLSession、NSURLConnection。
参考:URL Loading System Programming Guide

作用

设置请求属性
– setCachePolicy:
– setMainDocumentURL:
– setNetworkServiceType:
– setTimeoutInterval:
– setURL:
– setAllowsCellularAccess:

设置HTTP具体属性
– addValue:forHTTPHeaderField:
– setAllHTTPHeaderFields:
– setHTTPBody:
– setHTTPBodyStream:
– setHTTPMethod:
– setHTTPShouldHandleCookies:
– setHTTPShouldUsePipelining:
– setValue:forHTTPHeaderField:

实例方法

addValue:forHTTPHeaderField:
向HTTP头字典中加入一个HTTP头值。

  • (void)addValue:(NSString *)value forHTTPHeaderField:(NSString *)field
    value: 头字段的值
    field: 头字段的名字。为了跟HTTP RFC保持一致,这里头字段的名字忽略大小写。
    这个方法可以向头字段中增加值。 如果指定头字段已经有值了,那么新的值将会被添加到原有的值后面。中间加上合适的分隔符。 在HTTP中,分隔符是逗号。

注意:NSURLConnection 和 NSURLSession 是用来处理HTTP协议的各个方面的。 因此,下面这些头不应该修改:
Authorization
Connection
Host
WWW-Authenticate
此外,如果上传的请求体的大小可以通过计算得出(比如请求体的内容是一个NSData对象),那么Content-Length这个头也是设置好了的。

setAllHTTPHeaderFields:
替换指定头字段的值。

  • (void)setAllHTTPHeaderFields:(NSDictionary *)headerFields
    headerFields: 新的头字段和值的字典。 头字段必须是字符串类型的,因此,字典的键值都必须是NSString的子类。如果有一组键值其中有一个不是NSString的子类,那么这一组键值将被忽略。
    注意:NSURLConnection 和 NSURLSession 是用来处理HTTP协议的各个方面的。 因此,下面这些头不应该修改:
    Authorization
    Connection
    Host
    WWW-Authenticate
    此外,如果上传的请求体的大小可以通过计算得出(比如请求体的内容是一个NSData对象),那么Content-Length这个头也是设置好了的。

setAllowsCellularAccess:
设置连接是否可以使用蜂窝数据(如果存在的话)

  • (void)setAllowsCellularAccess:(BOOL)allow
    allow: YES可以使用,NO不能使用。 默认是YES。

setCachePolicy:
设置缓存策略。

  • (void)setCachePolicy:(NSURLRequestCachePolicy)policy
    policy: 新的缓存策略。

setHTTPBody:
设置请求体的具体值。

  • (void)setHTTPBody:(NSData *)data
    data: 新的请求体。这个方法会修改请求的信息体,就像HTTP Post请求中的一样。
    设置了这个值,会自动把setHTTPBodyStream:的值清空。 这两个方法是互斥的。

setHTTPBodyStream:
设置请求体的具体输入流内容。

  • (void)setHTTPBodyStream:(NSInputStream *)inputStream
    inputStream: 请求体的输入流。流的整个内容都是请求体,就像HTTP Post请求中的一样。
    inputStream应该是未打开的,请求本身会接管流的代理。
    设置了这个值,会自动把setHTTPBody:的值清空。 这两个方法是互斥的。

setHTTPMethod:
设置HTTP的请求方式。

  • (void)setHTTPMethod:(NSString *)method
    method: 请求方式。 默认是GET。

setHTTPShouldHandleCookies:
设置是否使用默认cookie处理方式

  • (void)setHTTPShouldHandleCookies:(BOOL)handleCookies
    handleCookies: YES使用默认的,NO不使用默认的。默认YES。
    如果 NSMutableURLRequest 对象设置了Cookie 头, 那么这个方法不起作用。头里设置的Cookie会覆盖所有的cookie。

setHTTPShouldUsePipelining:
设置在接到前一个请求的响应之前,是否传输数据。

  • (void)setHTTPShouldUsePipelining:(BOOL)shouldUsePipelining
    shouldUsePipelining: YES传输,NO不传输。默认NO。

setMainDocumentURL:
设置URL的主文档。

  • (void)setMainDocumentURL:(NSURL *)theURL
    theURL: URL的主文档。可以为nil。
    这个值需要合理设置。 比如,加载一个网页的时候,从最顶层的HTML文档开始加载比较合理。这个URL的cookie遵守同源策略。

setNetworkServiceType:
设置连接的服务类型。

  • (void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType
    networkServiceType: 网络服务类型。

setTimeoutInterval:
设置超时时间,单位秒。

  • (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval
    timeoutInterval: 超时时间,单位秒。默认60s。
    注意: iOS6之前,最小的超时时间(也是默认的超时时间)是240s。

通常情况下,超时时间不要设置的太短。最好是给用户提供一个取消长时间操作的方法。详细信息,参考:Designing for Real-World Networks。

setURL:

  • (void)setURL:(NSURL *)theURL

setValue:forHTTPHeaderField:
设置HTTP头字段的值。

  • (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field
    value: 头字段的值。覆盖原来的值。
    field:头字段的名字。 忽略大小写。
    注意:NSURLConnection 和 NSURLSession 是用来处理HTTP协议的各个方面的。 因此,下面这些头不应该修改:
    Authorization
    Connection
    Host
    WWW-Authenticate
    此外,如果上传的请求体的大小可以通过计算得出(比如请求体的内容是一个NSData对象),那么Content-Length这个头也是设置好了的。

NSURLResponse

//初始化方法

  • (instancetype)initWithURL:(NSURL *)URL MIMEType:(nullable NSString *)MIMEType expectedContentLength:(NSInteger)length textEncodingName:(nullable NSString *)name NS_DESIGNATED_INITIALIZER;

返回数据的数据类型(纯文本,视频,语音,超文本等)
@property (nullable, readonly, copy) NSString *MIMEType;

将要返回的数据的大小
@property (readonly) long long expectedContentLength;

编码的名称
@property (nullable, readonly, copy) NSString *textEncodingName;

获取服务器的文件的名称
@property (nullable, readonly, copy) NSString *suggestedFilename;

返回数据的头部信息,key-value格式
NSDictionary* allHeaderFields:

NSHTTPURLResponse

概述:
NSHTTPURLResponse 类是NSURLResponse的子类,可以访问HTTP协议的响应信息。使用HTTP URL发送请求时,无论是通过NSURLSession,NSURLConnection,还是NSURLDownload,它们的响应都是NSHTTPURLResponse 的实例。

作用:

  1. 初始化Response对象
  • (id)initWithURL:statusCode:HTTPVersion:headerFields:
  1. 获取HTTP响应头
  • (NSDictionary *)allHeaderFields
  1. 获取HTTP响应状态码
  • (NSString *)localizedStringForStatusCode:
  • (NSDictionary *)allHeaderFields
  • (NSString *)localizedStringForStatusCode:(NSInteger)statusCode;
    返回指定状态码对应的描述。

实例方法:
allHeaderFields
获取所有的HTTP响应头
HTTP头是忽略大小写的。为了简化代码,头字段都使用规范的标准格式。
比如,服务器发送 content-length,将自动调整为 Content-Length。
返回的头字典,在 set 操作时,是保留大小写的,除非已经有另一种大小写格式的存在了。查询key的时候是忽略大小写的。
比如,设置的时候,使用 X-foo, 后面再设置的时候,使用了X-Foo。那么,头字典将仍然使用X-foo,但是值更新成X-Foo的值。

initWithURL:statusCode:HTTPVersion:headerFields:
初始化HTTP响应对象
url: 产生响应的url
statusCode: 返回的HTTP状态码
HTTPVersion: HTTP响应的版本。通常是 "HTTP/1.1”
headerFields: 服务器传回来的响应头的字典

你可能感兴趣的:(iOS NSURLRequest&&NSURLResponse解读)