2011-07-18 17 views
2

OAuthでYouTubeサービスを使用しようとしています。私は要求トークンを取得し、それを認可し、それらをアクセストークンに変換することができました。OAuthとYouTube API

今、これらのトークンを使用してYouTubeサービスへのリクエストを実際に行っています。たとえば、私はプレイリストにビデオを追加しようとしています。したがって、私は

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

プラスいくつかの標準ヘッダとボディを送信

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

にPOSTリクエストを作っています(ホストとのContent-Length)リクエストの瞬間にurllib2(私はPythonを使用しています)によって追加されます。

は残念ながら、私はError 401: Unknown authorization headerを取得し、レスポンスのヘッダは、私がその領域のClientLoginにヒントWWW-Authenticateヘッダを解釈する方法がわからない。特に

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 

です。

私もOAuth Playgroundでプレイしようとしましたが、そのサイトから送信されたAuthorizationヘッダーは、フィールドの順番を除いて私と全く同じように見えます。それでも、plyagroundではすべてが機能します。まあ、ほぼ:開発者キーが見つからないというエラーが表示されますが、これはプレイグランドに追加する方法がないため妥当です。それでも、私はエラー401を過ぎています。

また、そこからAuthorizationヘッダーを手動でコピーしようとしましたが、Error 400: Bad requestがあります。

私は間違っていますか?

答えて

1

xmlns:ytより前に改行がありました。私はこれをncatを使ってデバッグすることができました。これはsuggeested hereであり、完全な応答を検査しました。

+0

あなた自身の答えを受け入れます。 – akira

0

それははるかに簡単で、認証ヘッダの世話をするので、私は、OAuthのパイソンモジュールを使用することをお勧めし:) https://github.com/simplegeo/python-oauth2、私はあなたが「UTF-8」であなたのパラメータをエンコード示唆ソリューションとして、私が持っていました同様の問題を解決し、Googleがutf-8でエンコードされた文字列を期待していたということでした。

+0

どういう意味ですか?ヘッダーはASCII文字のみを含み、URLエンコードされているので、UTF-8を使用するようにurllib2に指示する方法はありません – Andrea