一直都是在给服务器端发送请求的时候可能会出现设置头文件的情况,但这次获取HTTP 返回的头文件,着实让我纠结一番,但最终还是实现了,总结一下。(PS:其实最后方法很简单,只是分享一下纠结过程)

先看一下使用 AFNetworking3.0是如何获取数据的。

AFHTTPSessionManager *httpsManager = [AFHTTPSessionManager manager];
httpsManager.requestSerializer = [AFHTTPRequestSerializer serializer];
httpsManager.responseSerializer = [AFHTTPResponseSerializer serializer];
AFSecurityPolicy *security = [AFSecurityPolicy defaultPolicy];
security.allowInvalidCertificates = YES;
security.validatesDomainName = NO; httpsManager.securityPolicy = security; [httpsManager POST:ZCFormatURL(@"/paydone") parameters:params progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];
添加头文件:

[httpsManager.requestSerializer setValue:@"iOS" forHTTPHeaderField:@"os_type"];

[httpsManager.requestSerializer setValue:[info getNowTime] forHTTPHeaderField:@"time"];


分析一下返回的数据
failure 时:

  • NSURLSessionDataTask * _Nullable task 和请求有关的一些描述
  • NSError * _Nonnull error 网络请求不通等错误描述
    success 时:
  • NSURLSessionDataTask * _Nonnull task 和请求有关的一些描述
  • id _Nullable responseObject AFNetworking格式化之后的结果,与AFHTTPSessionManager的responseSerializer相对应

很明显,我们所要的数据最有可能是在 task 中,所以那就看一下NSURLSessionDataTask类吧,

/** An NSURLSessionDataTask does not provide any additional* functionality over an NSURLSessionTask and its presence is merely* to provide lexical differentiation from download and upload tasks. */ @interface NSURLSessionDataTask : NSURLSessionTask @end

发现它仅仅只是继承自NSURLSessionTask,并没有自己的属性方法,好,那就接着看父类NSURLSessionTask
父类属性倒是不少(太长了,代码不放这了)。最有可能包含我们所要信息应该就是response属性了

@property (nullable, readonly, copy) NSURLResponse *response;         /* may be nil if no response has been received */

好,那就接着看NSURLResponse,发现他的属性方法中没有能获取头文件的。倒是他的子类中有一个属性挺顺眼的。

/*!
@method allHeaderFields
@abstract Returns a dictionary containing all the HTTP header fields
of the receiver.
@discussion By examining this header dictionary, clients can see
the "raw" header information which was reported to the protocol
implementation by the HTTP server. This may be of use to
sophisticated or special-purpose HTTP clients.
@result A dictionary containing all the HTTP header fields of the
receiver.
*/
@property (readonly, copy) NSDictionary *allHeaderFields;

赶紧回去判定一下返回的task.response是不是NSURLResponse的子类

if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) {NSLog(@"The return class is subclass %@",NSStringFromClass([NSHTTPURLResponse class])); }else{ NSLog(@"The return class is not subclass %@",NSStringFromClass([NSHTTPURLResponse class])); }

打印日志:
2016-01-15 11:29:52.547 demo[535:106586] The return class is subclass NSHTTPURLResponse

果真是,这下就好办多了,直接强转,获取数据就好了

NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
NSDictionary *allHeaders = response.allHeaderFields;

转载于:https://www.cnblogs.com/wanglizhi/p/5711222.html

获取http请求响应头相关推荐

  1. php 获取请求,php获取http请求的头信息的方法

    php中如何获取http请求的头信息呢,这里提供一下本文搜集的相关内容,供大家参考. PHP中有现成的函数: getallheaders (PHP 4, PHP 5) getallheaders - ...

  2. 在线HTTP请求/响应头转JSON工具

    在线HTTP请求/响应头转JSON工具 在线HTTP请求/响应头转JSON工具 本工具可以将HTTP的请求或相应头的文本数据转成JSON格式数据,纯客户端实时转换. https://tooltt.co ...

  3. http状态码 以及请求响应头相关

    1xx消息[编辑] 这一类型的状态码,代表请求已被接受,需要继续处理.这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束.由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非 ...

  4. 五千来多字,就为了聊聊HTTP报文,请求响应头,cookie以及HTTPS加密方式

    靓仔靓女们大家好,我们又见面了,公众号:java小杰要加油,这周来分享一篇关于HTTP协议相关的文章 看完此文可以对 HTTP报文格式.HTTP各种请求头,HTTP响应码. cookie属性以及HTT ...

  5. vue页面返回消息头获取_vue在响应头response中获取自定义headers操作

    日常开发,我们可能会为了安全问题,保证第三方无法通过伪造返回报文欺骗前端,需要在返回报文中添加自定义参数,用于验证身份,后端添加自定义参数,前端校验自定义参数通过后才会执行相应的操作. 系统为了安全会 ...

  6. 获取、设置响应头、设置缓冲区

    获取请求头 获取请求头使用HttpServletRequest对象的getHeader().getHeaders().getHeaderNames().getIntHeader().getDateHe ...

  7. JavaScript获取http,请求协议头,域名,端口,url

    window.location.protocol 获取http,http://请求协议头 window.location.host 获取域名并带端口 xxx.com 如果有端口就是 xxx.com:8 ...

  8. Chrome浏览器设置header请求 响应头 使用 Chrome ModHeader插件,添加/修改/删除HTTP请求标头和响应标头

    ModHeader,是一款可以添加/修改/删除请求标头和响应标头的浏览器插件 ModHeader插件功能 ModHeader插件支持添加/修改/删除请求标头和响应标头,并可以启用基于URL /资源类型 ...

  9. ajax前后端通信的头部消息之请求头与响应头

    前后端在通信时,互相发送的消息包括头部消息和主体数据,而头部消息分为请求头和响应头两种. 请求头是前端发送,服务端获取. 响应头是服务端发送,前端获取. 设置请求头的规则: 请求头设置必须在open方 ...

最新文章

  1. ArrayList的subList方法
  2. Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
  3. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
  4. 多路RTSP-RTMP转RTMP定制版
  5. Jco服务配置以及程序编写
  6. SQL Server和Oracle的差异
  7. 人脸方向学习(四):人脸关键点检测+Mobilenet_v3结构探索
  8. Labview调用python
  9. php中怎样添加文字水印,php给图片添加文字水印
  10. 期货公司开户实力经纪业务的规模
  11. 李白:下终南山过斛斯山人宿置酒
  12. 中国富人的身影:世界最大楼市泡沫在加拿大
  13. HDFS Shell 命令简介及查询
  14. 因为相信所以看见,既然看见注定坚信《7》
  15. 计算机usb无法使用,电脑USB接口都不能用的解决办法[多图]
  16. 济南打印个人社保缴费证明操作手册--招投标使用
  17. R语言绘制坐标 保存图片
  18. 尚硅谷云原生实战视频教程发布
  19. ansys六个应力的物理意义
  20. Atitit s2018 s4 doc list dvchomepc dvccompc.docx .docx \s2018 s4 doc compc dtS44 \s2018 s4 doc dvc

热门文章

  1. Golang协程goroutine和管道channel结合案例
  2. [Ubuntu软件]好用轻巧的录屏软件——Kazam
  3. Python3 绘制同心圆代码示例
  4. Linux ifconfig指令
  5. Spring事务管理机制
  6. 在git项目误上传了本地idea配置文件,如何解决?
  7. mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No suc
  8. Qt for Android获取手机热点开关状态
  9. 【小米校招笔试】给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次
  10. MATLAB中将pgm图片二值化