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?
, puis accepter votre propre réponse. – akira