AFNetWorking使用记录

AFNetWorking用起来挺方便,但我目前对它的了解基本仅限于简单的数据请求,所以时常碰到各种问题,开个帖子专门整理AFNetWorking遇到的问题,算作笔记。

1. 添加RAW请求头

具体操作:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

[manager setResponseSerializer:[AFJSONResponseSerializer serializer]];

[manager setRequestSerializer:[AFJSONRequestSerializer serializer]];

[manager.requestSerializer setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];

后面就是正常的manager的post请求就可以了。

[manager POST:@"地址连接" parameters:@"参数" progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

NSLog(@"请求成功!");

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"请求失败!");

}];

这里遇到一个坑

manager.requestSerialize = [AFJSONRequestSerializer serializer];

用点语法赋值的时候崩溃在AFN的类里了。

不知道是不是当时还有哪里写错了,有空会再测一下。

2.字典转json (有些请求的参数要求是json类型)

dic:为参数字典

NSData *data1 = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];

NSString * json = [[NSString alloc]initWithData:data1 encoding:NSUTF8StringEncoding];

3.AFNetWorking出现code=-1016错误:Request failed: unacceptable content-type: text/html

解决方法:

在AFNetWorking中找到" AFURLResponseSerialization.m ", 然后在200查找下面代码(我目前查找到的是在228行)

self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];

将这句替换成为下面这句:

self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];

这句是添加了两种类型:@"text/plain"和@"text/html"。

依据情况和报错添加,-1016应该只需添加@"text/html"。

网上也有说添加以下代码的,暂未尝试过,先记录下。

[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];

4.AFNetWorking设置超时时间

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

[manager setResponseSerializer:[AFJSONResponseSerializer serializer]];

[manager setRequestSerializer:[AFJSONRequestSerializer serializer]];

// 设置超时时间

[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];

manager.requestSerializer.timeoutInterval = 20.f;

[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容