【发布时间】:2014-11-05 23:40:37
【问题描述】:
我正在尝试在 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)
【问题讨论】:
-
kCFStreamErrorDomainKey 1 是 POSIX 域,这意味着 kCFStreamErrorCodeKey 57 是“套接字未连接”。您 Mac 上的防火墙是否不允许 Xcode/模拟器进行外部连接?
-
@quellish 我的 Mac 上的防火墙已关闭。
-
在我的例子中,_kCFStreamErrorCodeKey=57 匹配请求已发送到服务器的状态,但在服务器将响应发送回客户端之前客户端已脱机。重试这种失败会导致在服务器数据库中创建两个相同的记录。不确定假设 57 表示“我发送了整个请求”是否安全。即使您现在下线,您也可以放心地假设服务器会处理该请求。
标签: ios cocoa-touch