我需要检查一个URL(由NSURL表示)是否可用返回404什么是实现这一目标的最佳途径?
我希望能有一个方式,如果可能的话,要检查这个没有代理。 我需要阻止程序执行,直到我知道,如果网址可以访问,还是不行。
我需要检查一个URL(由NSURL表示)是否可用返回404什么是实现这一目标的最佳途径?
我希望能有一个方式,如果可能的话,要检查这个没有代理。 我需要阻止程序执行,直到我知道,如果网址可以访问,还是不行。
正如你可能已经知道,一般的错误可以通过didFailWithError方法获取:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
}
但对于404“找不到”或500“内部服务器错误”应该能够didReceiveResponse方法内捕获:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
if ([response respondsToSelector:@selector(statusCode)])
{
int statusCode = [((NSHTTPURLResponse *)response) statusCode];
if (statusCode == 404)
{
[connection cancel]; // stop connecting; no more delegate messages
NSLog(@"didReceiveResponse statusCode with %i", statusCode);
}
}
}
我需要它还是不使用委托的解决方案,所以我把这里其他的答案中所示的代码片段,并创建了一个在我的情况下,运作良好(和可能是你所期待的一样)一个简单的方法:
-(BOOL) webFileExists {
NSString *url = @"http://www.apple.com/somefile.html";
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];
NSHTTPURLResponse* response = nil;
NSError* error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"statusCode = %d", [response statusCode]);
if ([response statusCode] == 404)
return NO;
else
return YES;
}
我使用woodmantech答案以上,但改变了它根据我看到的其他类似的问题在这里,以便它不会下载整个文件,看是否存在。
我改变NSURLRequest
到NSMutableURLRequest
,并补充说:
[request setHTTPMethod:@"HEAD"];
这似乎很好地工作。 我的工作我的第一个应用,所以还没有真正的体验。 感谢大家。
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse* response = nil;
NSError* error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"statusCode = %d", [response statusCode]);
您可以实现通过调用同步连接:
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSHTTPURLResponse* response = nil;
NSError* error = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
你的线程将阻塞直到请求beeen制造。