网络连接丢失 - 错误域 = kCFErrorDomainCFNetwork 代码 = -1005 - 在 GET 响应中

Posted

技术标签:

【中文标题】网络连接丢失 - 错误域 = kCFErrorDomainCFNetwork 代码 = -1005 - 在 GET 响应中【英文标题】:The network connection was lost - Error Domain=kCFErrorDomainCFNetwork Code=-1005 - in GET response 【发布时间】:2018-06-04 10:08:28 【问题描述】:

我只是在 GET 请求中收到此错误。 在服务器端,我们有管理对 Tomcat 的请求和响应的 Apache HTTP 服务器。

有两个客户端 androidios。 Android 应用程序中的一切工作正常。另一方面,在 iOS 应用中,所有 POST 响应都正常,问题只是 GET 响应。

我跟踪了请求,所有请求都在服务器端应用程序上收到,关于日志,服务器将响应发送给客户端,但客户端没有得到任何响应。

THIS 解决方案都不适用于我的情况。

我的一段代码:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
manager.responseSerializer = [[AFHTTPResponseSerializer alloc] init];
NSData *data = [request.Data dataUsingEncoding:NSUTF8StringEncoding];
NSString *length = [NSString stringWithFormat:@"%lu", [data length]];
NSMutableURLRequest *urlRequest = [PagingManager makeURLRequest:length andUrl:_url];
[urlRequest setHTTPMethod:@"GET"];
NSArray *arr = [request.Data componentsSeparatedByString:@" "];
NSString *session = [PagingManager normalizeGetRequest:arr[0]];
NSString *query = [PagingManager normalizeGetRequest:arr[1]];
NSString *getReq = [NSString stringWithFormat:@"?s=%@&q=%@", session, query];
NSURL *getURL = [NSURL URLWithString:[_url concat:getReq]];
urlRequest.URL = getURL;
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:urlRequest uploadProgress:nil downloadProgress:nil completionHandler:^
(NSURLResponse *response, id responseObject, NSError *error) 
    if (error) 
        DDLogError(@"ERROR: %@, reason: %@", @"connection failed with error", [error debugDescription]);

        NSString *const TIMEOUT = @"TimeOut";
        NSException *p = [[NSException alloc] initWithName:EXExceptionOnExchangeClientConnectionFail
                                                    reason:(error.code == NSURLErrorTimedOut) ? TIMEOUT : [error localizedDescription]
                                                  userInfo:nil];
        EXExchangeExceptionEventArgs *eventArgs = [[EXExchangeExceptionEventArgs alloc] initWithRequest:_request andError:p];
        [self exchangeException:eventArgs];

        _isRunning = NO;

     else 
        NSString *responseString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSData *decryptData = [[IOCryptographer Current] asDataDecryptString:responseString];
        if (_request.ReqMethod == GET) 
            DDLogDebug(@"Cache-Control Max-Age : %@", ((NSHTTPURLResponse *) response).allHeaderFields[@"Cache-Control"]);
            DDLogDebug(@"All header of response in GET : %@", ((NSHTTPURLResponse *) response).allHeaderFields);
            DDLogDebug(@"response: %@  and responseObject: %@", response, responseObject);

            NSCachedURLResponse *cachedURLResponse = [[NSCachedURLResponse alloc] initWithResponse:response data:decryptData];
            [NSURLCache.sharedURLCache storeCachedResponse:cachedURLResponse forRequest:cacheRequest];
         else 
            DDLogDebug(@"All header of response in POST : %@", ((NSHTTPURLResponse *) response).allHeaderFields);
        

        [_dataStream appendData:decryptData];
        [self connectionDidFinishLoadingWithData:responseString];
    
];

[dataTask resume];

还有我的应用程序的日志:

2018-06-04 12:41:22.871344+0430 AppName[53990:2111182] TI​​C 读取状态 [4:0x60800016ec40]: 1:57 2018-06-04 12:42:27.006807+0430 AppName[53990:2112128] TIC 读取状态 [5:0x60c000170500]: 1:57 2018-06-04 12:42:47.084334+0430 AppName[53990:2112128] TIC 读取状态 [6:0x60c00016f000]: 1:57 2018-06-04 12:42:47.085662+0430 AppName[53990:2112128] 任务 . HTTP 加载失败(错误代码:-1005 [4:-4]) 2018-06-04 12:42:47.085935+0430 AppName[53990:2112202] 任务 . 完成错误 - 代码:-1005 2018-06-04 12:42:47.087246+0430 AppName[53990:2112202] [错误] 2018-06-04T12:42:47:086 线程:[2110090] 类:[EXExchangeClient] 方法:[-[EXExchangeClient handleAsync: andMode:]_block_invoke@118] 描述:[]: 错误:连接失败并出现错误,原因:错误域=NSURLErrorDomain 代码=-1005“网络连接丢失。” UserInfo=NSUnderlyingError=0x60c00025c0e0 错误域=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo=_kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4, NSErrorFailingURLStringKey=https://App URL/?s=session id, NSErrorFailingURLKey=https://App URL/?s=session id, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=网络连接丢失。 [错误] 2018-06-04T12:42:47:086 线程:[2110090] 类:[EXExchangeClient] 方法:[-[EXExchangeClient handleAsync:andMode:]_block_invoke@118] 描述:[]: 错误:连接失败并出现错误,原因:错误域=NSURLErrorDomain 代码=-1005“网络连接丢失。” UserInfo=NSUnderlyingError=0x60c00025c0e0 错误域=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo=_kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4, NSErrorFailingURLStringKey=https://App URL/?s=session id, NSErrorFailingURLKey=https://App URL/?s=session id, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=网络连接丢失。 [错误] 2018-06-04T12:42:47:099 线程:[2110090] 类:[EXSession] 方法:[-[EXSession onExchangeException:]@159] 描述:[]: 错误:网络连接丢失。 2018-06-04 12:42:47.100285+0430 AppName[53990:2112202] [错误] 2018-06-04T12:42:47:099 线程:[2110090] 类:[EXSession] 方法:[-[EXSession onExchangeException: ]@159] 描述:[]: 错误:网络连接丢失。 [调试] 2018-06-04T12:42:47:100 线程:[2110090] 类:[EXSession] 方法:[-[EXSession goRequestExchangeException:]@346] 描述:[]: 交换结束 2018-06-04 12:42:47.101545+0430 AppName[53990:2112372] [DEBUG] 2018-06-04T12:42:47:100 线程:[2110090] 类:[EXSession] 方法:[-[EXSession goRequestExchangeException: ]@346] 描述:[]: 交换结束 [错误] 2018-06-04T12:42:47:100 线程:[2110090] 类:[EXSession] 方法:[-[EXSession goRequestExchangeException:]@348] 描述:[]: 服务器错误:网络连接丢失。 2018-06-04 12:42:47.102801+0430 AppName[53990:2112372] [错误] 2018-06-04T12:42:47:100 线程:[2110090] 类:[EXSession] 方法:[-[EXSession goRequestExchangeException: ]@348] 描述:[]: SERVER-ERROR: 网络连接丢失。

我猜这个问题是由 Apache 引起的。

这个问题有什么解决办法吗? 感谢您的帮助。

【问题讨论】:

有人知道吗?!! 【参考方案1】:

最后,在 3 周后,我找到了解决方案。 我们将“Content-length”设置为标头,Apache(WWW) 丢弃那些拥有它的请求。所以我删除了那个标题,现在一切正常:)

【讨论】:

你真是个天才。我删除了Content-Type,它现在就像一个魅力。 @KimiChiu 也许这篇文章对你有好处 (***.com/questions/15860742/…)【参考方案2】:

我遇到了同样的问题,我附上了解决方案的屏幕截图,以显示我是如何解决问题的。

在我的情况下,问题是 API 请求被服务器 Sucuri/Cloudproxy 阻止(或者您可以说防火墙服务)。禁用防火墙解决了这个问题

【讨论】:

正如我之前提到的,它发生在 GET 请求中,其他请求运行良好。此外,出于安全原因,我无法禁用防火墙。

以上是关于网络连接丢失 - 错误域 = kCFErrorDomainCFNetwork 代码 = -1005 - 在 GET 响应中的主要内容,如果未能解决你的问题,请参考以下文章

网络连接丢失 - 错误域 = kCFErrorDomainCFNetwork 代码 = -1005 - 在 GET 响应中

使用 NSURLSessionUploadTask 上传视频。错误“网络连接丢失。”

为啥我的 nextcloud 网络驱动器无法连接智能卡丢失错误?

错误代码=-1005 “网络连接丢失。”在 Swift 中使用 Web Service

Alamofire 网络连接丢失

网络连接丢失错误仅在带有 AFNetworking 的 iOS7 上