最近苹果强推HTTPS让人无奈之余,又多了些问题,记录一下,大家可参考,本人菜鸟,有错误的地方还请大神们指正。
今天说的是HTTPS下,使用AFNetworking 3来做网络请求,要修改两个地方,网络请求很常见,所以简单记录一下。
AFNetworking做网络请求,就需要先创建会话管理者:
AFHTTPSessionManager *sessionManage = [AFHTTPSessionManager manager];
然后就是创建URL的参数相关字典
NSDictionary *parameterDic = @{/*请求参数*/};
最后,就是请求网络数据
[sessionManage POST:@"https://www.baidu.com" parameters:parameterDic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Success!😂 responseClass:%@ -- responseObject: %@", [responseObject class], responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Fail!😬Error: %@", error);
}];
常规步骤就是以上那些了,但是HTTPS请求时,你也许会发现以下的问题:
-1016错误:
Fail!😬Error: Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x60800022ba40>
原因:
AFNetworking可接受的内容类型不包含“text/html”格式。
解决方法:
在AFNetworking文件夹中,找到
AFURLResponseSerialization.m
将原来的:
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
改成(其实就是加一个可接受类型"text/html"):
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
很快,你再次运行代码,可能又会出现另外一个错误。
3840错误:
Fail!😬Error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
原因:
大概就是没有设置好吧。🤷♂️
解决方法:
在创建会话者时,加上下面两行代码:
sessionManage.requestSerializer = [AFHTTPRequestSerializer serializer];
sessionManage.responseSerializer = [AFHTTPResponseSerializer serializer];
好了,运行,问题应该解决了吧!🐒