我正在分析聊天中来自vimeo/twitch/youtube等的URL。一切都很好,除了当我从抓取youtube切换到实际使用他们的api时。现在这是一个非常小的应用程序,所以不需要巨大的客户端libs和oAuth 2等。只需将python与urlib2一起使用即可。
现在,如果我在浏览器中打开这个特定的url,我会得到数据,但当我在服务器上打开它时,我会收到403 Forbidden
。根据谷歌开发者控制台的数据,在我的服务器上查询时,它已经工作了2/10次。
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)
这是我的应用程序创建的url。当我在浏览器中打开它并在api键等中绘图时,它运行得很好,但当我这样做时:
urllib2.urlopen(url)
我得到403 Forbidden
。
api密钥由Google Developers Console中的"Public api access"->"Server key"生成。它有IP白名单,服务器IP就在那里。
有人知道为什么会发生这种事吗?我唯一能想到的原因是urlib2发送的头告诉youtube请求来自python,但当你有api密钥时,这不应该是个问题吗?
使用urllib2时,您需要确保已对所有参数进行了url编码。。。如果您的密钥中有一个字符由于未进行url编码而被篡改,则可能导致403。