开发中我们是使用的大多数是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 ];
return [[ self alloc ] init ];
}
/// 默认的初始化
- (
instancetype)init {
self = [super init];
if (!self) {
return nil;
self = [super init];
if (!self) {
return nil;
}
/// 默认编码为
NSUTF8StringEncoding
self.stringEncoding = NSUTF8StringEncoding;
self.mutableHTTPRequestHeaders = [NSMutableDictionary dictionary];
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
float q = 1.0f - (idx * 0.1f);
[acceptLanguagesComponents addObject