OAuth and the YouTube API



我正在尝试使用OAuth的YouTube服务。我已经能够获得请求令牌,授权它们并将它们转换为访问令牌。

现在我正试图使用这些令牌来实际执行对YouTube服务的请求。例如,我正在尝试将视频添加到播放列表中。因此,我正在向

发出POST请求https://gdata.youtube.com/feeds/api/playlists/XXXXXXXXXXXX

发送body

<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:yt="http://gdata.youtube.com/schemas/2007">
  <id>XXXXXXXXX</id>
</entry>

和标题

Gdata-version: 2
Content-type: application/atom+xml
Authorization: OAuth oauth_consumer_key="www.xxxxx.xx",
                                oauth_nonce="xxxxxxxxxxxxxxxxxxxxxxxxx",
                                oauth_signature="XXXXXXXXXXXXXXXXXXX",
                                oauth_signature_method="HMAC-SHA1",
                                oauth_timestamp="1310985770",
                                oauth_token="1%2FXXXXXXXXXXXXXXXXXXXX",
                                oauth_version="1.0"
X-gdata-key: key="XXXXXXXXXXXXXXXXXXXXXXXXX"

加上一些标准头(Host和Content-Length),这些头是由urllib2(我使用Python)在请求的那一刻添加的。

不幸的是,我得到一个Error 401: Unknown authorization header,响应的标头是

X-GData-User-Country: IT
WWW-Authenticate: GoogleLogin service="youtube",realm="https://www.google.com/youtube/accounts/ClientLogin"
Content-Type: text/html; charset=UTF-8
Content-Length: 179
Date: Mon, 18 Jul 2011 10:42:50 GMT
Expires: Mon, 18 Jul 2011 10:42:50 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Connection: close

特别是我不知道如何解释WWW-Authenticate报头,其领域提示到ClientLogin。

我还尝试过使用OAuth Playground,该站点发送的授权头看起来与我的完全相同,除了字段的顺序。不过,在胶合板上,一切都行得通。好吧,几乎:我得到一个错误告诉开发者键丢失,但这是合理的,因为没有办法在操场上添加一个。尽管如此,我还是通过了错误401。

我也尝试手动复制授权头从那里,我得到了一个Error 400: Bad request

我做错了什么?

原来问题是xmlns:yt之前的换行符。我可以像这里建议的那样使用ncat调试它,并检查完整的响应。

我建议使用oauth python模块,因为它更简单,并照顾auth头:)https://github.com/simplegeo/python-oauth2,作为一个解决方案,我建议你用'utf-8'编码你的参数,我有一个类似的问题,解决方案是谷歌期待utf-8编码字符串

相关内容

  • 没有找到相关文章

最新更新