AuthSub и Blogger - PullRequest
       31

AuthSub и Blogger

0 голосов
/ 16 июля 2010

Я пытаюсь получить список блогов данного пользователя.Я думаю, что я успешно авторизовался со всеми токенами, но когда я спрашиваю о списке блогов, я временно получаю 302 перемещенных.Я использую curl для отправки запросов.

На своей странице обратного вызова я обновляю токен до токена сеанса:

$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 );

Я получаю этот ответ:

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

Хорошо, теперь я думаю, что я готов к извлечению данных, я делаю это:

$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 );

Но я всегда получаю 302 перемещенных временно.Я проверил, что я не включил ни safe_mode, ни openbasedir, чтобы разрешить работу CURLOPT_FOLLOWLOCATION, и я также проверил с помощью

curl_getinfo( $curl, CURLINFO_EFFECTIVE_URL );

, какой последний URL запрашивался, чтобы убедиться, что curl пытается перенаправить.

Может быть, я сделал какой-то неверный шаг AuthSub?

PD: Очевидно, я пропустил код, который извлекает маркер сеанса, но я дважды проверил его и выхватил правильную часть заголовка.

1 Ответ

1 голос
/ 16 июля 2010

Если вы изучите вывод curl_getinfo($curl);, вы получите redirect_count?Если это так: если бы это было 5, я бы выставил maxredirs выше.

Если нет, я бы установил

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

... и проверил его вывод.

Возможно, это так же просто, как установить его (никогда не работал с интерфейсом блоггера):

curl_setopt($curl,CURLOPT_UNRESTRICTED_AUTH,true);
...