網(wǎng)絡(luò)請求af直接報錯code=-1005問題總結(jié)
方法一
將報錯的接口記錄下來重新請求一次,在failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) block回調(diào)中添加以下代碼
if (error.code == -1005) {? ? ? ? ? ? ? ? ? ? ? ?
if (self.code_1005_method_count_dic == nil) {? ? ? ? ? ? ? ? ? ? ? ? ? ?
self.code_1005_method_count_dic = [[NSMutableDictionary alloc] init];? ? ? ? ? ? ? ? ? ? ? ? ?
? [self.code_1005_method_count_dic setObject:@(1) forKey:REPLACE_NIL_OBJECT(action)];? ? ? ? ? ?
? ? ? ? ? ? }else {? ? ? ? ? ? ? ? ? ? ? ? ? ?
int count =? [self.code_1005_method_count_dic[action] intValue];? ? ? ? ? ? ? ? ? ? ? ?
? ? if (count >= 5) {? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? DLog(@"超過5次未成功接口action=%@",action)? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? responseBlock(@{});? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? return ;? ? ? ? ? ? ? ? ?
? ? ? ? ? }? ? ? ? ? ? ? ? ? ?
? ? }?? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?
? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? dispatch_group_t downloadGroup = dispatch_group_create();?? ? ? ? ? ? ? ? ? ? ? ? ? ?
dispatch_group_enter(downloadGroup);?? ? ? ? ? ? ? ? ? ? ? ?
? ? dispatch_group_wait(downloadGroup, dispatch_time(DISPATCH_TIME_NOW, 3000000000)); // Wait 5 seconds before trying again.? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dispatch_group_leave(downloadGroup);?? ? ? ? ? ? ?
? ? ? ? ? ? ? dispatch_async(dispatch_get_main_queue(), ^{? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? //重新請求的方法?? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? [self reset1005requestWithAction:action Param:param OnFinished:responseBlock];?? ? ? ? ? ?
? ? ? ? ? ? ? ? });??
? ? ? ? ? ? ? ? ? ? ? });?? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ?
? ? ? DLog(@"當(dāng)前接口action=%@連接丟失重新發(fā)起",action)? ? ? ? ? ? ? ? ? ?
? ? return;? ? ? ? ? ? ?
? ? ? }
方法二
通過多次測試驗(yàn)證,發(fā)現(xiàn)將APP與服務(wù)端的長鏈接關(guān)閉后,該問題得到解決;因此我們需要在網(wǎng)絡(luò)請求頭里對connection字段進(jìn)行處理,該字段默認(rèn)為keep-live保持長鏈接,修改如下
[self.manager.requestSerializer setValue:@"close" forHTTPHeaderField:@"Connection"];
以上作為該次問題記錄,網(wǎng)上找了很久,多數(shù)為第一種解決辦法,第二種方法目前測試能一次性解決不再報錯-1005,暫未發(fā)現(xiàn)有其他影響