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出現(xiàn)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"];

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容