python - OAuth 和 YouTube API

标签 python oauth youtube youtube-api

我正在尝试通过 OAuth 使用 YouTube 服务。我已经能够获取请求 token 、授权它们并将它们转换为访问 token 。

现在我正尝试使用这些 token 实际向 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)添加的标准 header (Host 和 Content-Length)。

不幸的是,我得到了一个错误 401:未知的授权 header ,响应的 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 header ,其领域暗示 ClientLogin。

我也试过玩 OAuth Playground并且该站点发送的 Authorization header 看起来与我的完全一样,除了字段的顺序。尽管如此,在 plyground 上一切正常。好吧,差不多了:我收到一条错误消息,提示缺少 Developer key ,但这是合理的,因为无法在 playground 上添加一个。尽管如此,我还是跳过了错误 401。

我还尝试从那里手动复制授权 header ,但我收到了 错误 400:错误请求

What am I doing wrong?

最佳答案

原来问题是 xmlns:yt 之前的换行符。按照建议,我能够使用 ncat 对其进行调试 here ,并检查完整的响应。

关于python - OAuth 和 YouTube API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6731966/

相关文章:

python - Pandas :read_csv 表示 'space-delimited'

python - aiohttp 模块 - 导入错误

java - 单点登录 - Django 到 java servlet

java - 集中式 API 提供者 - oAuth 与否?

iOS YouTube 分享扩展不提供 URL

python - 在 Python 中随机化句子

python - 将具有给定 C header 的深层嵌套结构解包到字典中?

python - 我有 python 文件名 MiscTest.py,现在我想在 linux 中运行这个文件,只有一个名字 MiscTest

c# - 在没有 ms-app 的情况下从 OAuth 重定向到 UWP 应用程序

android - 将视频从设备播放到 LAN 上的电视