2011-11-21 44 views
1

我想獲取html頁面並解析它。NSURLConnection:我試圖接收html頁面,但總是得到錯誤403

我送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:

@Christophe Debove,你是對的。我將POST請求更改爲GET,並收到406錯誤。當我刪除「Accept」標題時它變得有效。即使沒有谷歌開發者密鑰,它也能工作

+0

HTTP是HTTP如果它在瀏覽器中工作,並且如果你檢查你的標題值,它必須工作,無論設備,所以如果你的瀏覽器,你不需要谷歌開發關鍵是一樣的。請注意一些webapp作爲谷歌日曆問你一個驗證碼,如果你不使用API​​的方式,在多個請求從相同的IP後。確保你的管子永遠不會問你。 –

回答

1

它似乎服務器禁止你。當您忘記傳遞安全參數或者某些標題值錯誤時,可能會發生這種情況。

HTTP code 403 Forbidden 

我嘗試發送請求與LiveHTTPHeader的Firefox模塊。 我看到YouTube的API不接受POST請求,但只有GET。

當我與POST方法送我得到403 forbiden Target feed is read-only

所以請您用GET

[request setHTTPMethod:@"GET"]; 

你可以刪除你的一些報頭值的方法,即使他們不會導致PB有無用。

+0

我添加了標題,但它對我沒有幫助。該問題僅適用於http://gdata.youtube.com/feeds/api/videos – Voloda2

+0

您是否添加標題或替換?您必須更換 –

+1

感謝您的幫助。我替換了標題,但我需要一個Google開發人員密鑰。我發現它http://code.google.com/apis/youtube/2.0/developers_guide_protocol.html – Voloda2

相關問題