2011-07-18 4 views
2

J'essaie d'utiliser les services YouTube avec OAuth. J'ai pu obtenir des jetons de requête, les autoriser et les transformer en jetons d'accès. Maintenant, j'essaie d'utiliser ces jetons pour faire des demandes aux services YouTube. Par exemple, j'essaie d'ajouter une vidéo à une playlist. Par conséquent, je fais une requête POST à ​​OAuth et l'API YouTube

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

envoyer un corps de

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

et les en-têtes

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" 

ainsi que quelques têtes standard (hôte et Content-Length) qui sont ajoutés par urllib2 (j'utilise Python) au moment de la demande.

Malheureusement, je reçois un Error 401: Unknown authorization header, et les en-têtes de la réponse sont

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 

En particulier, je ne sais pas comment interpréter l'en-tête WWW-Authenticate, dont le royaume astuces pour ClientLogin.

J'ai également essayé de jouer avec le OAuth Playground et l'en-tête Autorisation envoyé par ce site ressemble exactement au mien, sauf pour l'ordre des champs. Toujours, sur le plyaground tout fonctionne. Eh bien, presque: je reçois une erreur indiquant qu'une clé Developer est manquante, mais c'est raisonnable car il n'y a aucun moyen d'en ajouter une sur le terrain de jeu. Pourtant, je passe devant l'erreur 401.

J'ai également essayé de copier manuellement l'en-tête d'autorisation à partir de là, et j'ai obtenu un Error 400: Bad request.

Qu'est-ce que je fais mal?

Répondre

1

Il s'avère que le problème était le retour à la ligne avant xmlns:yt. J'ai été capable de déboguer cela en utilisant ncat, comme suggéré here, et en inspectant la réponse complète.

+0

, puis accepter votre propre réponse. – akira

0

Je suggère d'utiliser le module python OAuth, car il est beaucoup plus simple et prend en charge les en-têtes auth :) https://github.com/simplegeo/python-oauth2, comme solution que je vous suggère d'encoder vos paramètres avec « utf-8 », j'ai eu un problème similaire, et la solution était que google attendait chaînes encodées UTF-8

+0

Je ne suis pas sûr de ce que vous voulez dire. Les en-têtes contiennent uniquement des caractères ASCII et sont codés en URL. Je ne peux donc pas dire à urllib2 d'utiliser UTF-8 – Andrea