使用AFN框架访问网路使开发便捷了许多。但是使用的时候仍然会出现一些意想不到的错误。本文详细说明错误的原因,让你知其然知其所以然。
错误1. Code=-1006、unacceptable text/html
访问网络直接进入failure回调:
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
{
NSLog(@"%@",error);
}];
输出结果是:(已省略无关信息)
Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html"
此错误意思是不能接收的返回值类型:text/html,即服务器返回了一个text/html类型的返回值。
出现原因为AFN本身不能接受这种类型,默认接收类型只有application/json,text/json,text/javascript三种。
解决方案:为AFN添加此接收类型:
AFURLResponseSerialization.m 文件中
//找到此行
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
//修改为
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];
此时运行一下看看,又懵逼了,还是直接进入了failure回调,错误如下。
错误2. Code=3840、JSON text did not start
NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set."
错误意思是Json并不是以array或者object开始的,换句话说即json的格式不正确。
出现原因是服务器返回的数据并非Json,但是AFN却当成Json去强行解析,那报错就不足为奇了。
manager.responseSerializer 的初值为[super setResponseSerializer:responseSerializer];默认是json
解决方案:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//加上这一句即可
manager.responseSerializer = [AFHTTPResponseSerializer serializer];