NSData для NSURLConnection возвращает NULL на некоторых сайтах - PullRequest
4 голосов
/ 26 декабря 2011

Я новичок в интернет-соединении для iOS. Я пытаюсь получить данные со специального сайта.

Следующие коды прекрасно работают со всеми сайтами для просмотра данных в URL.

Однако если я изменю его на специальном сайте, чтобы получить их данные, он вернет 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 Ответ

5 голосов
/ 26 декабря 2011

Вы можете попробовать использовать удобный метод:

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

Если это не сработает, я получу заголовки ответа, используя curl, из терминала и посмотрим, что произойдет.

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

В качестве альтернативы вы можете напечатать заголовки ответов прямо внутри XCode при использовании NSHTTPURLResponse:

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 OK

Код ответа и заголовкискажу вам, что происходит с точки зрения сервера.Если код ответа не равен 200, вы не получите ожидаемые данные.Здесь вы можете найти список кодов статуса HTTP: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

...