小白记录学习iOS网络框架使用中遇到的问题
使用AFNetworking 4.x版本进行post请求出现了情况
Domain=com.alamofire.error.serialization.response Code=-1011 “Request failed: not found (404)”
后台说是请求参数有问题,不是json格式的,我仔细看了入参数据我是按照规范json格式传入的。
遇到了这个错误自查了以下几个问题:
1.确认post时带的参数params是不是有问题
2.确认一下请求是否写错了
3.确认requestSerializer序列化是否有问题
开始解决:
网上大部分说法是修改acceptableContentTypes 比如下面:
sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/html",@"text/plain",nil];
但是,这么修改并没有解决这个问题,最后解决问题是需要修改请求序列化
sessionManager.requestSerializer = [AFHTTPRequestSerializer serializer];
改成
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
这么修改就可以成功设置json参数。
总结:
对于AFHTTPSessionManager,当其在要发送请求时,会调用AFHTTPRequestSerializer 来组装请求。 而当请求获得了响应,需要作出解析时,又会调用对应的response serializer来解析返回的data。对于服务器响应的解析过程,在AFHTTPSessionManager中,是通过AFHTTPResponseSerializer来实现的。
AFHTTPRequestSerializer:二进制格式
AFJSONRequestSerializer:JSON 继承自AFHTTPRequestSerializer
AFPropertyListRequestSerializer:Plist 继承自AFHTTPRequestSerializer
查看请求头内容需使用
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field
NSLog(@"%@",sessionManager.requestSerializer.HTTPRequestHeaders);
接着学习。