3.3.1 所有请求类型共用的对象

NSURL

如果 URL 引用的是网络资源, 就会在后台线程中执行代码

NSURL *url = [NSURL urlWithString:mysteryString];
NSData *data = [NSData dataWithContentsOfURL:url];

NSURL 对象是不可变的
如果用于实例化的 NSURL 对象的字符串是不合法的, 那么创建方法调用就会返回 nil. 

NSURLRequest

NSURLRequest 对象包含了加载 URL 内容所需的信息, 并且独立于 URL 中指定的协议. iOS 中的 URL 加载系统支持 HTTP、HTTPS、FTP 与 FILE URL 内容的加载. URL 载系统提供了一种扩展方式以处理新的协议, 方式是创建 NSURLProtocol 的子类, 然后将返回结果提供给 URL 加载系统

NSURLRequest 类是不可变的, 不能修改除 URL、缓存策略与超时值外的属性。如果 URL 是 HTTP 或 HTTPS, 那么请求方法将是 GET, 并且使用操作系统提供的默认头

3.3.1 所有请求类型共用的对象_第1张图片
NSURLRequest 默认创建

使用默认值表示请求使用 URL 协议指定的请求缓存规则, 请求有着标准的请求超时.

下述示例展示了如何使用自定义的缓存与超时值来创建 NSURLRequest 对象. 构建 URL 加载系统的代码忽略了所有缓存, 如果完成请求连接的时间超过 20 秒, 将会生成错误.


3.3.1 所有请求类型共用的对象_第2张图片
自定义缓存与请求时间

NSMutableURLRequest 是 NSURLRequest 的子类, 提供了赋值方法以修改请求的属性。 URL 加载系统会自动装配请求的 Content-Length 头

POST请求

有两种方式可以向 NSURLRequest 提供 HTTP 体: 在内存中(就像之前的示例一样)或是通过 NSInputStream. 代码可以通过输入流提供请求体而无须将请求体加载到内存中。 如果发送诸如照片或视频等大容量内容, 那么使用输入流是最佳选择。 下述代码片段展示了如果通过输入流创建 POST 方法, 需要事先将 NSString srcFilePath 设定为应用包或是水箱中的文件路径:

NSMutableURLRequset *request = [NSMutableURLRequest requestWithURL:url];
NSInputStream *inStream = [NSInputStream inputStreamWithFileAtPath:srcFilePath];
[request setHTTPBodyStream:inStream];

由于 NSURLRequest 对象包含 HTTP 与非 HTTP 请求的属性, 因此访问非 HTTP URL 的代码需要将特定于 HTTP 的属性的值设为 nil.

NSURLConnection

NSURLConnection 对象是 URL 加载系统活动的中心, 只提供了用于初始化/开启与取消连接的方法
NSURLConnection 类通过 3 种不同的操作模式发挥作用: 同步、异步与队列式异步

NSURLRespone

NSURLResponse 对象会在 URL 加载请求完毕后返回。

MIMEType - 结果数据的 MIME 类型。 该值来源于服务器, 如果客户端框架认为服务器有错, 那么可以修改: 如果服务器没有提供, 还可以由客户端框架提供

expectedContentLength - 该值可能由请求返回, 也可能不返回, 返回值可能与返回内容的实际大小不同。如果返回内容的大小未知, 那么该值将等于 NSURLResponseUnknownLength

suggestedFilename - 要么是服务器提供的内容文件名, 要么来自于 URL 和 MIME 类型。

URL - 返回内容的 URL。 由于重写向和标准化等原因, 该 URL 可能与请求提供的 URL 不同

textEncodingName - 最初的数据源所用的文本编码名。 如果响应中没有使用文本编码, 那么该值将为 nil。

URL 加载系统提供了一个名为 NSHTTPURLResponse 的 NSURLResponse 子类, 它包含特定于 HTTP 请求的属性. 该类对于确定 HTTP 请求的结果是必需的。 它有如下额外参数:

响应头 - 该属性返回响应头值的 NSDictionary 对象。 字典的键是头的名字, 每个键的值是头的值。 HTTP 规范允许一个请求有多个同名的头。 NSHTTPURLResponse 通过返回一个包含所有头值的 NSString 对象(头值之间用逗号分隔)来处理这一点。

HTTP 状态码 - 来自于响应状态行的整数状态码。 NSHTTPURLResponse 类有一个类方法可以针对任意状态码返回本地化的字符串说明

你可能感兴趣的:(3.3.1 所有请求类型共用的对象)