2010-07-15 11 views
0

J'essaie de récupérer une liste de blogs d'un utilisateur donné. Je pense que j'ai réussi à m'autoriser avec tous les trucs symboliques, mais quand je demande le blog de liste, je reçois un 302 déplacé temporairement. J'utilise curl pour envoyer les demandes.AuthSub et Blogger

Dans ma page de rappel, mettre à niveau le jeton à un jeton de session:

$header = array(); 
$header[] = 'GET /accounts/AuthSubSessionToken HTTP/1.1'; 
$header[] = 'Authorization: AuthSub token="'.$_GET['token'].'"'; 

$curl = curl_init('https://www.google.com/accounts/AuthSubSessionToken'); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
curl_setopt($curl, CURLOPT_HEADER, true); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
$response = curl_exec($curl); 

-je obtenir cette réponse:

HTTP/1.1 200 OK 
Content-Type: text/plain; charset=UTF-8 
Date: Thu, 15 Jul 2010 20:08:07 GMT 
Expires: Thu, 15 Jul 2010 20:08:07 GMT 
Cache-Control: private, max-age=0 
X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Content-Length: 39 
Server: GSE 

Ok, maintenant je pense que je suis prêt à la récupération de données, Je fais ceci:

$headers = array(); 
$headers[] = 'GET /feeds/default/blogs HTTP/1.1'; 
$headers[] = 'Authorization: AuthSub token="'.$token.'"'; 
$headers[] = 'Host: www.blogger.com'; 

$curl = curl_init('http://www.blogger.com'); 
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($curl, CURLOPT_TIMEOUT, 5); 
curl_setopt($curl, CURLOPT_PORT, 80); 
curl_setopt($curl, CURLOPT_HEADER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_MAXREDIRS, 5); 
$reply = curl_exec($curl); 

Mais je reçois toujours un 302 déplacé temporairement. J'ai vérifié que je ne l'ai pas permis safe_mode ni openbasedir pour permettre le travail de CURLOPT_FOLLOWLOCATION, et j'ai aussi vérifié avec

curl_getinfo($curl, CURLINFO_EFFECTIVE_URL); 

ce qui était la dernière url demandée pour être sûr boucle tente la redirection.

Peut-être que j'ai fait un pas d'AuthSub faux? De toute évidence, j'ai utilisé le code qui extrait le jeton de session, mais je l'ai vérifié deux fois et j'ai saisi la bonne partie de l'en-tête.

+0

Ok je l'ai résolu. J'avais besoin de définir l'URL pour le troisième curl_init: http://www.blogger.com/feeds/default/blogs 'qui a résolu mon problème. –

Répondre

1

Si vous examinez la sortie de curl_getinfo($curl);, obtenez-vous un redirect_count? Si oui: si c'est 5, je mettrais le maxredirs plus haut.

Sinon, je mis

curl_setopt($curl,CURLOPT_VERBOSE,true); 
curl_setopt($curl,CURLOPT_STDERR, STDOUT) 

... et d'examiner sa sortie.

Peut-être qu'il est aussi simple que de cela (jamais travaillé avec l'interface blogueur):

curl_setopt($curl,CURLOPT_UNRESTRICTED_AUTH,true); 
+0

Le nombre de redirections indique 2, donc mes paramètres sont (pour l'instant) assez. De toute façon je l'ai résolu, c'était un problème avec l'URL spécifiée. –