2012-10-30 124 views
2

我想用cURL发送请求并检索响应标题。php - 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>"; 
    } 
?> 
+0

从浏览器中捕获请求(为了方便,可能使用像Fiddler这样的HTTP代理),并将它的头文件与curl请求中的头文件进行比较。你会发现一个(或多个)差异是不同反应的原因。 – Jon

+0

这似乎确实很奇怪;也许浏览器在将数据输出给用户之前重写数据? –

+0

我认为你的浏览器正在使用代理,而cURL则不是。它是否正确? –

回答

0

引起的响应中的差一些通过浏览器,并通过卷曲发送的请求之间的差异(在HTTP头几乎可以肯定)。

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