NSURLConnection的NSData在某些站点中返回NULL

时间:2011-12-26 09:04:51

标签: nsurlconnection nsdata nsurl

我是iOS的互联网新手。 我正试图从特殊网站获取数据。

以下代码适用于所有网站以查看网址中的数据。

但是,如果我将其更改为特殊网站以获取其数据,则返回NULL !!

我认为网站有些阻止这种类型的实现。因为该站点提供了一些XML信息。

NSString *URLString = @"http://www.specialsite.com/";
NSURL *postURL = [NSURL URLWithString:URLString];
NSURLRequest *postRequest = [NSURLRequest requestWithURL:postURL];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:postRequest returningResponse:&response error:&error];

if (responseData) {
    NSLog(@"Response was %@", [NSString stringWithCString:[responseData bytes] encoding:NSUTF8StringEncoding]);          
}

控制台中的响应也是:

2011-12-26 12:24:37.245 Arz[6113:207] Response was (null)

请记住,如果我改变:

    NSString *URLString = @"http://www.specialsite.com/";

    NSString *URLString = @"http://www.apple.com/";

工作长官!

对不起,我不能在这里(公开)说出网站的名称。

1 个答案:

答案 0 :(得分:5)

您可以尝试使用便捷方法:

NSString *mydata = [[NSString alloc] initWithContentsOfURL:@"http://example.com"];

如果这不起作用,我会从终端使用curl获取响应头,看看会发生什么。

curl -I http://www.apple.com

或者,当您使用NSHTTPURLResponse时,您可以在XCode内打印响应标头:

NSURLRequest *postRequest = [NSURLRequest requestWithURL:[NSURL URLWithString: @"http://www.apple.com"]];
NSHTTPURLResponse *response = nil;
NSError *error = nil;
NSData *responseData = [NSURLConnection sendSynchronousRequest:postRequest returningResponse:&response error:&error];

NSDictionary *dict = [response allHeaderFields];
NSLog(@"Status code: %d",[response statusCode]);
NSLog(@"Headers:\n %@",dict.description);
NSLog(@"Error: %@",error.description);
//NSLog(@"Response data: %@",[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);

查找响应代码,例如HTTP / 1.1 200确定

响应代码和标题将告诉您从服务器的角度出了什么问题。如果响应代码不是200,则不会收到预期的数据。您可以在此处找到HTTP状态代码列表:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes