【发布时间】:2012-12-19 06:46:19
【问题描述】:
我使用NSString 方法initWithContentsOfURL:usedEncoding:error: 来获取某些页面的内容。我注意到,当我尝试访问的页面不存在时,此方法会执行很长时间,然后因超时错误而失败。我尝试将 NSURLRequest 和 NSURLConnection 类用于相同的目的,但得到相同的结果 - 执行时间长然后超时错误。
当我尝试在浏览器中打开同一页面时,我会更快地得到响应并返回页面不可用错误。
看起来可可方法不对页面名称进行 dns 解析,或者它们对该操作的超时时间更长。
所以我的问题是,我使用的可可方法可以解析 dns 吗?如果他们不这样做怎么办?
我使用的代码示例:
NSURL* url = [NSURL URLWithString:@"http://unexisting.domain.local"];
NSError* err = nil;
NSString* content = [NSString stringWithContentsOfURL:url usedEncoding:nil error:&err];
if (err) {
NSLog(@"error: %@", err);
} else {
NSLog(@"content: %@", content);
}
NSURL* url = [NSURL URLWithString:@"http://unexisting.domain.local"];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
NSURLResponse* response = nil;
NSError* err = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
if (err) {
NSLog(@"error: %@", err);
} else {
NSString* content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"content: %@", content);
}
谢谢!
【问题讨论】:
-
为什么使用“.local”作为顶级域名?出于测试目的还是仅在本地网络中?
-
如果我将您的代码与 url unexisting.domain.ch 一起使用,它会非常快。
-
我使用本地只是为了测试目的。实际上,我也必须访问本地网络中的主机。当使用“unexisting.com”时你是对的——它很快,而不是当用户只是“不存在”时——它会挂断一段时间。我的本地网络中的 dns 可能存在一些问题...
标签: objective-c cocoa http