NSURLConnection: я пытаюсь получить HTML-страницу, но всегда получаю ошибку 403 - PullRequest
1 голос
/ 21 ноября 2011

Я хочу получить HTML-страницу и разобрать ее.

отправляю на http://gdata.youtube.com/feeds/api/videos?q=u_dAYLIG984

NSURL* url = [NSURL URLWithString: fullPath];

NSMutableDictionary* headers = [[[NSMutableDictionary alloc] init] autorelease];
[headers setValue:@"application/x-www-form-urlencoded;charset=utf-8" forKey:@"Content-Type"];
[headers setValue:@"text/html" forKey:@"Accept"];
[headers setValue:@"no-cache" forKey:@"Cache-Control"];
[headers setValue:@"no-cache" forKey:@"Pragma"];
[headers setValue:@"close" forKey:@"Connection"];


NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:TIMEOUT_REQUEST];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];

conn = [[NSURLConnection alloc] initWithRequest:request delegate:delegate startImmediately:YES];

Я всегда получаю ошибку 403. Что не так?

РЕДАКТИРОВАНИЕ:

Я попробовал свой запрос на http://bbc.co.uk/, и он работает хорошо. Моя проблема только с http://gdata.youtube.com/feeds/api/videos?q=u_dAYLIG984

EDITED2:

@ Кристоф Дебов, вы правы. Я изменил свой запрос с POST на GET и получил ошибку 406. Это стало работать, когда я удалил заголовок «Принять». Работает даже без ключа разработчика Google.

1 Ответ

1 голос
/ 21 ноября 2011

Кажется, сервер запрещает вам. Это может произойти, если вы забыли передать параметры безопасности или ошиблись с некоторыми значениями заголовков.

HTTP code 403   Forbidden 

Я пытаюсь отправить запрос с LiveHTTPHeader модулем firefox. И я видел, что YouTube API не принимает запрос POST, а только GET.

Когда я отправляю методом POST, я получаю 403 forbiden Target feed is read-only

Поэтому, пожалуйста, измените метод на GET

[request setHTTPMethod:@"GET"];

вы можете удалить некоторые значения заголовков, даже если они не приводят к тому, что pb там бесполезны.

...