0

特定のユーザーのブログのリストを取得しようとしています。一連のトークン関連で自分自身を認証したと思いますが、リスト ブログを要求すると、一時的に 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 を受け取ります。CURLOPT_FOLLOWLOCATION の動作を許可するために safe_mode も openbasedir も有効にしていないことを確認しました。

curl_getinfo( $curl, CURLINFO_EFFECTIVE_URL );

curl がリダイレクトを試行していることを確認するために最後に要求された URL は何ですか。

AuthSub の手順を間違えたのでしょうか。

PD: 明らかに、セッション トークンを抽出するコードを省略しましたが、再確認して、ヘッダーの正しい部分を取得しました。

4

1 に答える 1

1

の出力を調べると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);
于 2010-07-16T00:30:43.257 に答える