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>";
}
?>
从浏览器中捕获请求(为了方便,可能使用像Fiddler这样的HTTP代理),并将它的头文件与curl请求中的头文件进行比较。你会发现一个(或多个)差异是不同反应的原因。 – Jon
这似乎确实很奇怪;也许浏览器在将数据输出给用户之前重写数据? –
我认为你的浏览器正在使用代理,而cURL则不是。它是否正确? –