NSURLConnection GET请求返回-1005,"网络连接丢失"

时间:2014-09-11 21:35:50

标签: ios cocoa-touch

我正在尝试使用iOS 8 SDK上的XCode 6(Beta7 2)中的NSURLConnection进行简单的GET请求,但是“代码1005失败,网络连接丢失”。当我尝试从Web获取http://www.google.com或其他一些示例页面时调用失败,但如果我向localhost(python -m SimpleHTTPServer)上的简单HTTP服务器发出请求,则调用成功。我也尝试使用AFNetworking库(2.4.1) - 使用NSURLConnection失败的URL也会因库而失败。

这是我的代码 -

NSString * url = @"http://0.0.0.0:8000";
// NSString * url = @"http://www.google.com";

NSLog(@"URL : %@", url);

// Mutable is probably not required, but just in case it REALLY WANTS me to set HTTP method
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[theRequest setHTTPMethod:@"GET"];

NSURLResponse *urlResponse = nil;
NSError *error = nil;

NSData * data = [NSURLConnection sendSynchronousRequest:theRequest
                                      returningResponse:&urlResponse
                                error:&error];

if (error == nil) {
    NSString *response = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(response);
} else {
    NSString *response = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"%@", [error userInfo]);
}

日志:

2014-09-11 17:34:23.950 SearchExample[5092:2074687] URL : http://www.google.com
2014-09-11 17:34:24.023 SearchExample[5092:2074687] {
    NSErrorFailingURLKey = "http://www.google.com";
    NSErrorFailingURLStringKey = "http://www.google.com";
    NSLocalizedDescription = "The network connection was lost.";
    NSUnderlyingError = "Error Domain=kCFErrorDomainCFNetwork Code=-1005 \"The network connection was lost.\" UserInfo=0x7fc8515640a0 {NSErrorFailingURLStringKey=http://www.google.com/, NSErrorFailingURLKey=http://www.google.com/, _kCFStreamErrorCodeKey=57, _kCFStreamErrorDomainKey=1, NSLocalizedDescription=The network connection was lost.}";
    "_kCFStreamErrorCodeKey" = 57;
    "_kCFStreamErrorDomainKey" = 1;
}
2014-09-11 17:34:24.023 SearchExample[5092:2074687] URLResponse: (null)

6 个答案:

答案 0 :(得分:92)

我最近看到iPhone 6模拟器上的互联网连接失败,导致相同的错误。我的Mac有一个工作的互联网连接模拟器没有。重新启动模拟器解决了这个问题。

答案 1 :(得分:8)

我在iOS 9上通过某些网络电话持续得到此错误。两个工作正常,但另外两个没有。

原来是由于我在请求的正文中传递了一些不正确的参数...我不希望这会导致-1005错误...但它确实..摆脱了不必要的参数让它全部工作!

答案 2 :(得分:2)

我已经尝试了至少15个来自Google的答案所建议的所有内容,但在我尝试以下完全解决我的问题之前,其中没有一个解决了我的问题。似乎Wi-Fi连接可能在Mac上损坏,因此如果您删除正在使用的特定连接,然后再次连接(通过选择网络并再次输入密码),那么这将解决问题并且不再是可怕的-1005 “网络连接丢失”错误。

  • 转到Mac的菜单栏上的Wi-Fi符号,"关闭Wi-Fi"
  • 然后选择"打开网络偏好设置" (来自同一菜单,在底部)。
  • 在“网络”面板的右下角,选择"高级"。
  • 选择您之前连接的网络连接。
  • 点击此表下方的减号以删除此连接。
  • 点击"好的"对于这个窗口。
  • 点击"申请"在网络窗口。
  • 返回菜单栏上的Wi-Fi符号,重新打开Wi-Fi。
  • 等待您的网络连接出现然后选择它(现在它会再次要求输入密码,因为您删除了连接信息)。
  • 它现在将记住这个新刷新的连接,它可以解决问题!

答案 3 :(得分:1)

尝试在AFNetworking http或json中更改请求序列化。在我的情况下,这是json然后我设置为http。现在这样做了。

[[VTNetworkingHelper sharedInstance] performRequestWithPath:@"Your url  " withAuth:YES forMethod:@"POST" withRequestJSONSerialized:NO withParams:params withCompletionHandler:^(VTNetworkResponse *response) {
            if (response.isSuccessful) {
    }else {
    }];

答案 4 :(得分:0)

我有类似的问题,重启模拟器没有工作。在我的情况下,我能够点击Web服务,就像在奇怪的时间它会成功,甚至在时间它让我犯这个错误。我知道它很奇怪,但不知怎的。用swift中的以下方法解决了这个问题:

 let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
                urlconfig.timeoutIntervalForRequest = 1
                urlconfig.timeoutIntervalForResource = 1
                let session = NSURLSession(configuration: urlconfig)

                let task = session.dataTaskWithRequest(request){(data,response,error) in
    //Processing
    }
 task.resume()

答案 5 :(得分:-1)

简单&样品溶液,多次测试,工作完美。

  

//使用状态代码检查响应错误,如果得到-1005,则再次调用该api。

                if let strErrorReasonCode : Int = response.response?.statusCode {
                           if authentication_Errors_Range.contains(Alamofire_Error) {
                                self.POST(urlString, paramaters: paramaters, showLoader: showLoader, success: { (responseObject) in
                                    if response.result.isSuccess {
                                        if let value = response.result.value {
                                            let dictResponce = self.isValidated(value as AnyObject)
                                            if dictResponce.0 == true {
                                                success(dictResponce.1)
                                            }
                                            else {
                                                failure(dictResponce.1)
                                            }
                                        }
                                    }
                                }, failure: {_ in
                                    failure(jsonResponce)
                                })
                            }
                 }