AFNetworking (2.6.1)出现错误code = 1016和3084 的解决方案

来源:互联网 发布:伊藤诚 知乎 编辑:程序博客网 时间:2024/05/20 08:43

用AFN封装了一个网络工具出现了,发送网络请求出现出错:

错误打印为:(code = -1016)

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: 0x7fd8dbd62b30> 


错误原因:

在AFN框架中AFURLResponseSerialization响应数据序列化类中初始化方法

- (instancetype)init {    self = [super init];    if (!self) {        return nil;    }    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];    return self;}

从上面可以看出,响应数据序列化只支持以上几种格式数据,并不支持text/html格式数据。

解决方法

为AFHTTPSessionManager对象添加新序列化数据格式。

//用可变set接收原有类型的set   NSMutableSet *setM = [NSMutableSet setWithSet:manager.responseSerializer.acceptableContentTypes];//添加text/html类型[setM addObject:@"text/html"];//将可变set做一次copy,赋值回去manager.responseSerializer.acceptableContentTypes = setM.copy;

/*==================================== | ----------------------- Amer ----------------------- | ====================================*/

以上解决了数据类型的1016错误,但是CMD + R发现还有一个code = 3840错误

错误打印为:(code = 3840)

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.}

错误原因:

网络的响应头信息:

Content-Type charset = UTF-8,网络响应头和响应数据的编码格式可能与序列化编码格式有冲突(个人观点。)

解决方法

手动设置请求和响应序列化对象;
//设置请求信息序列化对象manager.requestSerializer = [AFHTTPRequestSerializer serializer];//设置响应数据序列化对象manager.responseSerializer = [AFHTTPResponseSerializer serializer];


0 0