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則不是。它是否正確? –