【发布时间】:2014-08-13 05:19:09
【问题描述】:
我正在尝试在我的计算机中设置一个 http 代理服务器来模拟虚拟开发环境。
为了访问本地 url,我将 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 在访问本地 url 时会返回一个NSURLErrorDomain Code=-1001 "The request timed out."。
3. 如果 url 不在/etc/hosts 中,NSURLSession 可以正常工作。
我还尝试了NSURLConnection,与NSURLSession 的输出相同。
那么,这是否意味着NSURLConnection/NSURLSession和浏览器使用不同的策略来做DNS?
如何处理或绕过这个?
更新
我为 ios 7.0+ 构建了这个环境。
环境:
- 计算机系统:
OS X 10.9.4 (13E28),其中设置了代理并有服务器。 - 设备系统:
iOS 7.1.2(11D257)
【问题讨论】:
-
您可能希望更清楚地说明您在何处运行此代码。这是为 OS X 构建的吗?你在你的 iPhone 上运行它吗? (上面的代码可以编译为...)我们可以看到您的主机条目吗?您是否尝试过使用不同的域名?
.local对 OS X 有特定的含义,我相信。我使用<whatever>.localhost,这种东西对我来说很好。 -
@MattGibson 在将
.local替换为.localhost后解决了这个问题。那你介意正式回答一下吗? -
真的很幸运没有屏蔽顶级域...
-
完成。是的,如果没有真正的 TLD,那将更加困难。
标签: objective-c http proxy nsurlconnection nsurlsession