2011-07-18 136 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