dataWithContentsOfURL不检索数据

时间:2013-01-20 11:29:55

标签: iphone html objective-c

我正在尝试获取此页面的源代码(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];

直到几天前一切正常,但从昨天开始没有结果。

你能帮帮我吗?谢谢。

3 个答案:

答案 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如何忽略它。