NSURLConnection:我试图接收html页面,但总是得到错误403

问题描述:

我想获取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后。确保你的管子永远不会问你。 –

它似乎服务器禁止你。当您忘记传递安全参数或者某些标题值错误时,可能会发生这种情况。

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