2010-03-30 27 views
5

我試圖使用PHP下載網頁的內容。 當我發出命令:PHP file_get_contents()對瀏覽器的行爲有所不同

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2"); 

它返回一個報告,該服務器已關閉的頁面。然而,當我將相同的URL粘貼到我的瀏覽器中時,我會看到預期的頁面。

有沒有人有任何想法是什麼造成這個? file_get_contents是否傳輸任何將其與瀏覽器請求區分開來的頭文件?

回答

16

是的,有差異 - 瀏覽器往往會發送大量額外的HTTP headers,我會說;並且由兩者發送的那些可能不具有相同的值。

這裏,在做了一些測試之後,似乎需要傳遞名爲Accept的HTTP標頭

這可以使用的file_get_contents第三個參數,指定其它附加的上下文信息來完成:

$opts = array('http' => 
    array(
     'method' => 'GET', 
     //'user_agent ' => "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2) Gecko/20100301 Ubuntu/9.10 (karmic) Firefox/3.6", 
     'header' => array(
      'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*\/*;q=0.8 
' 
     ), 
    ) 
); 
$context = stream_context_create($opts); 

$f = file_get_contents("http://mobile.mybustracker.co.uk/mobile.php?searchMode=2", false, $context); 
echo $f; 

有了這個,我能夠得到網頁的HTML代碼。


注:

  • 我第一次測試合格User-Agent,但它似乎沒有必要- 這就是爲什麼相應的線路是這裏作爲一個評論
  • 值用於Accept標題是我在使用Firefox請求該頁面之前使用的一個Firefox,然後嘗試使用file_get_contents
    • 其他一些值可能是好的,但我沒有做任何測試來確定哪個值是必需的。


欲瞭解更多信息,你可以看看:

-3

用%替換所有的空格20

相關問題