美文网首页
AFNetWorking使用记录

AFNetWorking使用记录

作者: 顾泠轩 | 来源:发表于2017-02-03 17:04 被阅读136次

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"];

相关文章

网友评论

      本文标题:AFNetWorking使用记录

      本文链接:https://www.haomeiwen.com/subject/yapdittx.html