php - cURL响应头不同于浏览器响应头

时间:2012-10-30 09:28:10

标签: php curl user-agent httpresponse

我想使用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

我想知道是什么原因导致响应返回不同的网址。这是一个小型的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>";
    }
?>

1 个答案:

答案 0 :(得分:0)

通过浏览器和curl(几乎可以肯定在HTTP标头中)发送的请求之间存在一些差异,导致响应不同。

您应该从浏览器捕获请求(为方便起见,可能使用像Fiddler这样的HTTP代理)并将其标头与curl请求中的标头进行比较。你会发现一个(或多个)差异是你所看到的原因。