使用仅API密钥时,YouTube数据API v3返回403错误
我在聊天中解析来自vimeo、twitch、youtube等网站的链接。整体上都很顺利,除了我从抓取youtube的数据转到直接使用他们的API时出现了一些问题。因为这个应用很小,所以不需要复杂的客户端库和OAuth 2.0等,只是用Python和urllib2。
现在,如果我在浏览器中打开这个特定的链接,我能正常获取数据,但当我在服务器上尝试时,却收到403 Forbidden
的错误。根据谷歌开发者控制台的反馈,我从服务器查询时只有2次成功,10次中有8次失败。
https://www.googleapis.com/youtube/v3/videos?id={id}&key={api_key}&part=snippet,contentDetails,statistics&fields=items(snippet/channelTitle,snippet/title,contentDetails/duration,statistics/viewCount)
这是我应用生成的链接。当我在浏览器中打开并输入API密钥等信息时,一切正常,但当我这样做时:
urllib2.urlopen(url)
我却收到了403 Forbidden
的错误。
这个API密钥是从谷歌开发者控制台的“公共API访问”下的“服务器密钥”生成的。这个密钥有IP白名单,而我的服务器IP已经在白名单中。
有没有人知道为什么会这样?我能想到的唯一原因是,urllib2发送的请求头告诉youtube这个请求是来自Python的,但有了API密钥,这应该不是问题吧?
1 个回答
1
在使用urllib2的时候,你需要确保把所有的参数都进行了网址编码。如果你的参数中有某个字符没有进行网址编码,可能会导致403错误。