NSURLSession通过httpproxy和/ etc / hosts时出现-1001错误

时间:2014-08-13 05:19:09

标签: objective-c http proxy nsurlconnection nsurlsession

我正在尝试在我的计算机中设置一个http代理服务器来模拟虚拟开发环境。

要访问本地网址,我将DNS信息放入计算机' /etc/hosts

这是我的测试代码:

NSURLSession *session = [NSURLSession sharedSession];
NSURL *url = [NSURL URLWithString:@"http://someurl.local/bluh/bluh/path"];
NSURLSessionDataTask *dataTask =
  [session dataTaskWithURL:url
         completionHandler:^(NSData *data, NSURLResponse *response,
                             NSError *error) {
             NSLog(@"data is %@ error is %@", data, error);
         }];
[dataTask resume];

我的实验: 1.像safari或chrome这样的浏览器可以访问本地Web服务和远程Web服务。 2.访问本地网址时,NSURLSession将响应NSURLErrorDomain Code=-1001 "The request timed out."。 3.如果网址不在/etc/hosts中,则NSURLSession可以正常工作。

我还尝试了NSURLConnection,输出与NSURLSession相同。 那么,这是否意味着NSURLConnection / NSURLSession和浏览器使用不同的策略来执行DNS?

如何处理或绕过这个?

更新

我为ios 7.0 +构建了这个环境。

环境:

  • 计算机系统:OS X 10.9.4 (13E28),用于设置代理并拥有服务器。
  • 设备系统:iOS 7.1.2(11D257)

1 个答案:

答案 0 :(得分:1)

.local被视为OS X上的特殊TLD,我认为iOS。我认为这主要是因为它使用as an indicator for Bonjour lookups。尝试更改为您的开发域的不同TLD。我使用" .localhost&#34 ;;我见过其他人使用" .dev"。这两个都按预期工作。

从链接的文章中可以看出,您可能已经遇到问题,因为您使用的是x.local - 一个标签,它将通过Bonjour而非DNS查找,因此您可能还会发现x.y.local也有效,但我个人只是一起避免.local