我是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/";
工作长官!
对不起,我不能在这里(公开)说出网站的名称。
答案 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