2

cURL を使用してリクエストを送信し、レスポンス ヘッダーを取得したいと考えています。

ブラウザーを使用すると、応答ヘッダーは次のようになります。

HTTP/1.0 302 Moved Temporarily
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Location: "Correct URL"
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Tue, 30 Oct 2012 08:32:24 GMT
Server: Google Frontend
Content-Length: 0

しかし、cURL を使用してリクエストを送信すると、レスポンス ヘッダーは次のようになります。

HTTP/1.1 302 Found
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Location: "Wrong URL"
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Tue, 30 Oct 2012 09:12:14 GMT
Server: Google Frontend
Content-Length: 0

応答が異なる URL を返す原因を知りたいです。これは、私が無駄に試した多くのサンプルと物事の中の小さな php サンプルです。

<?php
    $url = "url";
    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
    curl_setopt( $ch, CURLOPT_HEADER, true );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
    curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );
    curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.4) Gecko/20091030 Gentoo Firefox/3.5.4" );
    list( $header, $contents ) = preg_split( '/([\r\n][\r\n])\\1/', curl_exec( $ch ), 2 );
    curl_close( $ch );

    $header_text = preg_split( '/[\r\n]+/', $header );
    foreach ( $header_text as $headers ) {
        echo $headers . "</br>";
    }
?>
4

1 に答える 1

0

ブラウザとcurl(ほぼ確実にHTTPヘッダー)を介して送信されるリクエストにはいくつかの違いがあり、応答に違いが生じます。

ブラウザからリクエストをキャプチャし(おそらく便宜上FiddlerのようなHTTPプロキシを使用して)、そのヘッダーをcurlリクエストのヘッダーと比較する必要があります。あなたが見つける違いの1つ(またはそれ以上)はあなたが見ているものの理由です。

于 2012-10-30T09:47:09.033 に答える