我正在尝试获取此页面的源代码(http://www.sanmarinocard.sm),但dataWithContentsOfURL不会检索数据。
NSURL *url = [NSURL URLWithString:@"http://www.sanmarinocard.sm"];
NSData *responseData = [NSData dataWithContentsOfURL:url];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
直到几天前一切正常,但从昨天开始没有结果。
你能帮帮我吗?谢谢。答案 0 :(得分:5)
是的,它也适用于我。也许服务器暂时不可用。
不建议使用dataWithContentsOfURL:因为它是同步的并且会阻止你的应用程序正常工作;如果服务器没有响应,它可能会阻止你的应用很长一段时间。
首选方法是使用NSMutableURLRequest并发送异步请求。这将允许您的应用在加载时保持响应,还可以设置超时间隔并更轻松地处理任何错误。
NSURL *url = [NSURL URLWithString:@"http://www.sanmarinocard.sm"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setTimeoutInterval: 10.0]; // Will timeout after 10 seconds
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue currentQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (data != nil && error == nil)
{
NSString *sourceHTML = [[NSString alloc] initWithData:data];
// It worked, your source HTML is in sourceHTML
}
else
{
// There was an error, alert the user
}
}];
答案 1 :(得分:3)
我发现通过过滤用户代理阻止了我的应用程序。 我改变了价值,现在它完美无缺。
我修改了这样的代码:
NSString *userAgent = @"Mozilla/4.0 (compatible; MSIE 5.23; Mac_PowerPC)";
NSURL *url = [NSURL URLWithString: @"http://www.sanmarinocard.sm"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
[request setValue:userAgent forHTTPHeaderField:@"User-Agent"];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *result = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];
谢谢!
答案 2 :(得分:1)
现在,它运作正常。可能由于临时服务器不可用而发生错误。
此外,如前所述,强烈建议使用NSUTF8StringEncoding
。
它也可以与缓存有关:dataWithContentsOfURL:
使用NSURLConnection,它默认缓存响应。请参阅此question如何忽略它。