2011-07-18 95 views
2

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

现在我试图使用这些标记实际上向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)在请求时添加的。

不幸的是,我得到一个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.

我也尝试从那里手动复制授权标题,并且我得到Error 400: Bad request

我在做什么错?

回答

1

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

+0

然后接受你自己的答案。 – akira

0

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

+0

我不确定你是什么意思。标题只包含ASCII字符,并且是URL编码的,所以我不能告诉urllib2使用UTF-8 – Andrea