我正在尝试在我的计算机中设置一个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)
答案 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
。