欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入解析iOS中的NSURLRequest与NSURLResponse

时间:11-16 现代故事 提交错误

大家好,今天小编来为大家解答以下的问题,关于深入解析iOS中的NSURLRequest与NSURLResponse,这个很多人还不知道,现在让我们一起来看看吧!

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

NSURLRequest对应的可变类是NSMutableURLRequest。

创建请求

requestWithURL:

initWithURL:requestWithURL:cachePolicy:timeoutInterval:

initWithURL:cachePolicy:timeoutInterval: 获取请求属性

缓存策略

HTTPShouldUsePipelined

主文档URL

超时间隔

网络服务类型

网址

获取HTTP请求属性

allHTTPHeaderFields

HTTPBody

HTTPBodyStream

HTTP方法

HTTPShouldHandleCookies

valueForHTTPHeaderField:

类方法

requestWithURL:

使用默认缓存策略+默认超时+指定URL创建并返回请求。

(id)requestWithURL:(NSURL *)theURL

theURL: 请求的URL

返回值:新的URL请求。

默认的缓存策略是NSURLRequestUseProtocolCachePolicy。

默认超时时间为60 秒。 requestWithURL:cachePolicy:timeoutInterval:

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

(id)requestWithURL:(NSURL *)theURL

cachePolicy:(NSURLRequestCachePolicy)cachePolicy

timeoutInterval:(NSTimeInterval)timeoutInterval

theURL: 请求的URL

cachePolicy: 请求的缓存策略

timeoutInterval: 请求超时,以秒为单位。

返回值:新建URL请求实例方法

所有HTTP标头字段

(NSDictionary *)allHTTPHeaderFields

返回值:包含HTTP标头allowsCellularAccess所有字段的字典

(BOOL)允许蜂窝访问

返回值:YES 蜂窝数据可用,NO 蜂窝数据不可用。缓存策略

(NSURLRequestCachePolicy)缓存策略

返回值:本次请求使用的缓存策略。 HTTPBody

(NSData *)HTTPBody

返回值:请求体。 HTTPBodyStream

(NSInputStream *)HTTPBodyStream

返回值: 请求的输入流。如果未设置,则返回nil。该流只能用于验证,其他操作不可靠。

请求可以设置请求正文(HTTP Body)或输入流(HTTP Body Stream)。只能设置一项。

复制NSURLRequest 对象时输入流会被保留,但使用NSCoding 协议归档时会丢失。 HTTP方法

(NSString *)HTTP方法

返回值:请求方法。默认为“获取”

HEAD - 仅传递标头信息,不传递请求主体,也不传递响应主体。

GET——查询资源

PUT - 添加新资源

POST - 更新资源

DELETE - 删除资源HTTPShouldHandleCookies

(BOOL)HTTPShouldHandleCookies

返回值:YES使用默认cookie处理,NO不使用。

默认值为“是”。 HTTP 应该使用管道

返回在收到对前一个请求的响应之前是否需要传输数据。

(BOOL)HTTP 应该使用管道

返回值:YES表示发送,NO表示不发送。 initWithURL:

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

(id)initWithURL:(NSURL *)theURL

theURL: 请求的URL

返回值:新的URL请求。

默认的缓存策略是NSURLRequestUseProtocolCachePolicy。

默认超时时间为60 秒。 initWithURL:cachePolicy:timeoutInterval:

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

(id)initWithURL:(NSURL *)theURL

cachePolicy:(NSURLRequestCachePolicy)cachePolicy

timeoutInterval:(NSTimeInterval)timeoutInterval

theURL: 请求的URL

cachePolicy: 请求的缓存策略

timeoutInterval: 请求超时,以秒为单位。

返回值:新的URL请求mainDocumentURL

(NSURL *)mainDocumentURL

返回值: 请求URL对应的主文档。网络服务类型

(NSURLRequestNetworkServiceType)网络服务类型

返回值:网络服务类型。

网络服务类型向操作系统指示底层通信的角色。此技巧可帮助系统优化通信并确定其唤醒蜂窝数据或WiFi 的速度。调整不同的参数以平衡电池、性能和其他因素。

例如,NSURLNetworkServiceTypeBackground 应用于非用户请求的下载。比如提前在后台加载数据,这样用户需要看的时候就不需要加载了。支持安全编码

指示NSURLRequest 是否实现NSSecureCoding 协议。

(BOOL)支持安全编码

返回值:YES 实现NSSecureCoding 协议,NO 不实现。超时间隔

(NSTimeInterval)超时间隔

返回值: 请求超时时间,单位为秒。网址

(NSURL *)URLvalueForHTTPHeaderField:

(NSString *)valueForHTTPHeaderField:(NSString *)字段

field: 标头字段的名称。大小写被忽略。

返回值:头部字段的值,如果没有该字段则返回nil。

NSMutableURLRequest

概述

NSMutableURLRequest 是NSURLRequest 的子类。当发出多个请求时,您可以只创建一个可变对象,而不是为每次加载创建一个不可变的NSURLRequest 对象。

当初始化NSURLSession、NSURLConnection 和NSURLDownload 类时,NSMutableURLRequest 对象会被深度复制。

注意:该类仅封装URL请求信息。要实际发出请求,您需要使用其他类,例如NSURLSession 和NSURLConnection。

参考:URL加载系统编程指南

影响

设置请求属性

setCachePolicy:

setMainDocumentURL:

设置网络服务类型:

setTimeoutInterval:

setURL:

setAllowsCellularAccess:

设置HTTP 特定属性

addValue:forHTTPHeaderField:

setAllHTTPHeaderFields:

setHTTPBody:

setHTTPBodyStream:

setHTTPMethod:

setHTTPShouldHandleCookies:

setHTTPShouldUsePipelined:

setValue:forHTTPHeaderField:

实例方法

addValue:forHTTPHeaderField:

将HTTP 标头值添加到HTTP 标头字典中。

(void)addValue:(NSString *)HTTPHeaderField:(NSString *)字段的值

value: 头字段的值

field:标题字段的名称。为了与HTTP RFC保持一致,这里头字段的名称忽略大小写。

此方法向标头字段添加一个值。如果指定的标头字段已经有值,则新值将附加到原始值。在它们之间添加适当的分隔符。在HTTP中,分隔符是逗号。注意:NSURLConnection 和NSURLSession 用于处理HTTP 协议的各个方面。因此,不应修改以下标头:

授权

联系

主持人

WWW-验证

另外,如果上传的请求体的大小是可以计算的(例如请求体的内容是一个NSData对象),那么Content-Length头也会被设置。

setAllHTTPHeaderFields:

替换指定标头字段的值。

(void)setAllHTTPHeaderFields:(NSDictionary *)headerFields

headerFields: 新标头字段和值的字典。头字段必须是字符串类型,因此字典键必须是NSString 的子类。如果有一组键值不是NSString的子类,那么这组键值将被忽略。

注意:NSURLConnection 和NSURLSession 用于处理HTTP 协议的各个方面。因此,不应修改以下标头:

授权

联系

主持人

WWW-验证

另外,如果上传的请求体的大小是可以计算的(例如请求体的内容是一个NSData对象),那么Content-Length头也会被设置。设置允许蜂窝访问:

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

(void)setAllowsCellularAccess:(BOOL)允许

允许:YES 可以使用,NO 不能使用。默认为“是”。设置缓存策略:

设置缓存策略。

(void)setCachePolicy:(NSURLRequestCachePolicy)策略

policy: 新的缓存策略。设置HTTPBody:

设置请求体的具体值。

(void)setHTTPBody:(NSData *)数据

数据:新的请求正文。此方法修改请求正文,就像在HTTP Post 请求中一样。

设置该值会自动清除setHTTPBodyStream:的值。这两种方法是互斥的。设置HTTPBodyStream:

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

(void)setHTTPBodyStream:(NSInputStream *)inputStream

inputStream: 请求正文的输入流。流的全部内容是请求正文,就像HTTP Post 请求中一样。

inputStream 应该未打开,并且请求本身接管流的代理。

设置该值会自动清除setHTTPBody:的值。这两种方法是互斥的。设置HTTPMethod:

设置HTTP请求方法。

(void)setHTTPMethod:(NSString *)方法

method: 请求方法。默认为GET。 setHTTPShouldHandleCookies:

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

(void)setHTTPShouldHandleCookies:(BOOL)handleCookies

handleCookies: YES 使用默认值,NO 不使用默认值。默认为“是”。

如果NSMutableURLRequest 对象设置了Cookie 标头,则此方法无效。标头中设置的Cookie 将覆盖所有Cookie。 setHTTPShouldUsePipelined:

设置是否在收到对前一个请求的响应之前传输数据。

(void)setHTTPShouldUsePipelined:(BOOL)shouldUsePipelined

shouldUsePipelined: YES 传输,NO 不传输。默认为“否”。设置MainDocumentURL:

设置主文档的URL。

(void)setMainDocumentURL:(NSURL *)theURL

theURL: 主文档的URL。可以为零。

该值需要适当设置。例如,加载网页时,从顶层HTML 文档开始加载是有意义的。此URL 的cookie 遵守同源策略。设置网络服务类型:

设置连接的服务类型。

(void)setNetworkServiceType:(NSURLRequestNetworkServiceType)networkServiceType

networkServiceType: 网络服务类型。设置超时间隔:

设置超时(以秒为单位)。

(void)setTimeoutInterval:(NSTimeInterval)timeoutInterval

timeoutInterval: 超时时间(以秒为单位)。默认值为60 秒。

注意:iOS6之前,最小超时时间(也是默认超时时间)是240s。一般情况下,超时时间不宜设置得太短。最好为用户提供一种取消长时间运行的操作的方法。有关详细信息,请参阅:现实世界网络设计。

设置URL:

(void)setURL:(NSURL *)HTTPHeaderField: 的URLsetValue:

设置HTTP 标头字段的值。

(void)setValue:(NSString *)HTTPHeaderField:(NSString *)字段的值

value: 标头字段的值。覆盖原来的值。

field:标题字段的名称。大小写被忽略。

注意:NSURLConnection 和NSURLSession 用于处理HTTP 协议的各个方面。因此,不应修改以下标头:

授权

联系

主持人

WWW-验证

另外,如果上传的请求体的大小是可以计算的(例如请求体的内容是一个NSData对象),那么Content-Length头也会被设置。

NSURLResponse

//初始化方法

(instancetype)initWithURL:(NSURL *)URL MIMEType:(nullable NSString *)MIMEType ExpectedContentLength:(NSInteger)length textEncodingName:(nullable NSString *)name NS_DESIGNATED_INITIALIZER;返回数据的数据类型(纯文本、视频、语音、超文本等)

@property (可为空,只读,复制) NSString *MIMEType;

返回数据的大小

@property(只读)长长预期内容长度;

编码名称

@property (可为空、只读、复制) NSString *textEncodingName;

获取服务器文件的名称

@property (可为空,只读,复制) NSString *suggestedFilename;

以key-value格式返回数据的头信息

NSDictionary* allHeaderFields:

NSHTTPURLResponse

概述:

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

影响:

END,本文到此结束,如果可以帮助到大家,还望关注本站哦!

用户评论

■□丶一切都无所谓

终于有机会学习一下 iOS 的网络请求机制了!

    有12位网友表示赞同!

雨后彩虹

这段时间在做项目中遇到一些关于网络请求的问题,希望能从这篇文章中找到答案。

    有11位网友表示赞同!

生命一旅程

对 NSURLRequest 和 NSURLResponse 不太懂,看这篇文章正好补充下知识点。

    有12位网友表示赞同!

安陌醉生

感觉 Apple 开发文档有时候写的太官方了,希望这篇文章能解释得更详细易懂一些。

    有10位网友表示赞同!

爱你心口难开

想更深入地了解 iOS 如何处理网络请求,这篇解读应该很全面吧!

    有6位网友表示赞同!

愁杀

最近在学习 Swift,也想了解如何使用 NSURLRequest 进行网络请求。

    有14位网友表示赞同!

千城暮雪

学习 iOS 开发一直以来都是一个不断探索的过程,这篇文章或许能给我新的启发。

    有18位网友表示赞同!

你与清晨阳光

对于入门者来说,一篇详细的解读应该会帮助理解 iOS 网络请求的基本原理吧?

    有14位网友表示赞同!

花菲

以前只知道可以用AFN进行网络请求,现在想学习官方方法更深入地了解一下。

    有8位网友表示赞同!

限量版女汉子

看标题就感觉这篇文章挺实用的,正好我最近的项目需要用到网络请求功能。

    有13位网友表示赞同!

冷月花魂

希望能从文章中学习到一些关于 URL 构建和状态码解析的技巧。

    有7位网友表示赞同!

把孤独喂饱

期待分析详细讲解 NSURLRequest 的各种属性参数以及如何使用它们。

    有19位网友表示赞同!

念安я

不知道这篇文章是否会涉及网络错误处理和安全问题?这些都是很重要的部分。

    有12位网友表示赞同!

青楼买醉

学习官方方法比框架更牢固,期待深入了解 NSURLRequest 和 NSURLResponse 的用法。

    有9位网友表示赞同!

爱到伤肺i

最近在优化项目的网络请求效率,这篇文章或许能提供一些方法和思路。

    有11位网友表示赞同!

陌上花

如果文章能附上代码示例,那就太好了,更容易理解和实践。

    有13位网友表示赞同!

终究会走-

希望能从文章中学习到如何更好地使用 NSURLRequest 创建自定义的请求。

    有8位网友表示赞同!

【深入解析iOS中的NSURLRequest与NSURLResponse】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活