2012-10-30 118 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請求中的頭文件進行比較。你會發現一個(或多個)差異就是你所看到的原因。