AFNetwork 3.0 源码解读(三)AFURLRequestSerialization

本文深入探讨了AFNetworking 3.0中AFURLRequestSerialization的实现,重点关注了用于处理本地文件和输入字节流的`appendPartWithFileURL:`及`appendPartWithInputStream:`方法,解释了如何构建请求头中的Content-Disposition和Content-Type。
摘要由CSDN通过智能技术生成
开发中我们是使用的大多数是HTTP(HTTP,HyperText Transfer Protocol)协议,既然是协议就会有一些规范。每次客户端进行http/https请求时我们都要对请求进行设置,而而AFURLRequestSerialization就是帮助我们更快的完善请求的设置。

AFURLRequestSerialization顾名思义就是请求的序列化,用于帮助构建NSURLRequest,主要做了两个事情:
1.构建普通请求:格式化请求参数,生成HTTP Header。
2.构建multipart请求。


首先我们来看一下一个请求到底包含了那些东西。而AFURLRequestSerialization帮我们做了什么样的处理。随便找个app抓取一个请求。如下图一个普通的HTTP请求的样式。

这是截取了进入“蘑菇街”app登陆界面时的网络请求,在request下面可以看到下面的信息
GET /nmapi/user/v1/login/loginconfig_ab=1203&_app=mgj&_at=ee60c6c24e4df4fa&_atype=iphone&_av=728&_channel=NIMAppStore&_did=faf3eee959a29f4940eeb0d495567f88&_fs=NIMA
ppStore726&_lang=zh_CN&_network=2&_saveMode=0&_sdklevel=9.0&_swidth=1242&_t=1451446392&_version=7.2.8.1203&minfo=iPhone7%2C1  HTTP/1.1
Host: www.mogujie.com
Accept: */*
Cookie: __mgj_i_n=1; __mgjuuid=5068fb55-cd5e-c03b-cde9-4cba598825a1; _mg_tk=ebf1abe414
User-Agent: Mogujie4iPhone/7.2.8 (iPhone; iOS 9.0; Scale/3.00)
Accept-Language: zh-Hans-CN;q=1
Accept-Encoding: gzip, deflate
Connection: keep-alive

这里信息包括:请求方式(这里是GET),请求的URL ,HTTP的版本,Host, Accept, Cookie, User-Agent, Accept-Encoding,Connection,等,其中很大的一部分是于AFURLRequestSerialization来帮开发者构建。一般我们进行一个GET请求时,我们所传递的请求参数是拼接在URL中的,这部分的完成同样也是由AFNetworking来帮我们完成。


在AFURLRequestSerialization组成:

其它:
  •      stringEncoding                           ///  返回参数编码的编码样式,默认为 NSUTF8StringEncoding
  •   allowsCellularAccess    ///  是否可以通过手机网络发送请求
  •   cachePolicy             /// 缓存策略
  •   HTTPShouldHandleCookies /// 是否对cookies进行默认处理  默认为YES
  •   HTTPShouldUsePipelining /// 是否可以在上个数据传输的请求完成后继续传输数据。 Default is No
  •   networkServiceType      /// 服务器的类型 默认为 NSURLNetworkServiceTypeVoIP
  •   timeoutInterval          /// 一个请求的超时时长

配置HTTP请求头相关:
  •   HTTPRequestHeaders  
  • + serializer
  • – setValue:forHTTPHeaderField:
  • – valueForHTTPHeaderField:
  • – setAuthorizationHeaderFieldWithUsername:password:
  • – clearAuthorizationHeader

@property (readonly, nonatomic, strong) NSDictionary<NSString*NSString*> *HTTPRequestHeaders
获取请求头的信息,  默认包含  Accept-Language 和  User-Agent 

+ (instancetype)serializer   /// 返回一个默认配置序列化对象

+ ( instancetype )serializer {
   
return [[ self alloc ] init ];
}

/// 默认的初始化
- ( instancetype)init {
   
self = [super init];
   
if (!self) {
       
return nil;
    }
     /// 默认编码为 NSUTF8StringEncoding
    self.stringEncoding = NSUTF8StringEncoding;

   
self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary];

     /// 设置语言
    // Accept-Language HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4
    NSMutableArray *acceptLanguagesComponents = [NSMutableArray array];
     
    [[NSLocale preferredLanguages] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
       
float q = 1.0f - (idx * 0.1f);
        [acceptLanguagesComponents
addObject
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FY_Chao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值