【问题标题】:OAuth and the YouTube APIOAuth 和 YouTube API
【发布时间】:2011-10-07 14:23:54
【问题描述】:

我正在尝试通过 OAuth 使用 YouTube 服务。我已经能够获取请求令牌,对其进行授权并将其转换为访问令牌。

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

发出 POST 请求

https://gdata.youtube.com/feeds/api/playlists/XXXXXXXXXXXX

发送正文

<?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"

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

不幸的是,我得到了一个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,该站点发送的授权标头看起来与我的完全一样,除了字段的顺序。尽管如此,在 plyaground 上一切正常。好吧,几乎:我收到一条错误消息,提示缺少开发人员密钥,但这是合理的,因为无法在操场上添加一个。尽管如此,我还是通过了错误 401。

我还尝试从那里手动复制 Authorization 标头,我得到了一个Error 400: Bad request

我做错了什么?

【问题讨论】:

    标签: python oauth youtube youtube-api


    【解决方案1】:

    原来问题是xmlns:yt 之前的换行符。正如here 所建议的那样,我能够使用 ncat 进行调试,并检查完整的响应。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不确定你的意思。标头仅包含 ASCII 字符,并且是 URL 编码的,所以我无法告诉 urllib2 使用 UTF-8
      猜你喜欢
      • 2014-10-06
      • 2011-10-10
      • 2020-10-21
      • 2015-01-10
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 2017-12-21
      相关资源
      最近更新 更多