2013-01-06 40 views
1

我有一個PHP腳本來填充我的網站緩存。未設置主機標頭

我試圖繞過Nginx的前端,並從Apache後端抓取頭。

下面的例子作品(通過命令行):

curl -I -H "Host: example.com" 127.0.0.1 

然而,當我嘗試做相同的PHP - 它不會。

$headers = array("Host: example.com"); 
$url = "127.0.0.1"; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_HEADER, true); 
curl_setopt ($ch, CURLOPT_NOBODY, true); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); 
$ret = curl_exec ($ch); 
curl_close ($ch); 

echo "$ret"; 

這總是返回我的apache虛擬主機文件中列出的第一個網站 - 而不是「主機」http頭文件中列出的網站。

任何想法爲什麼它通過命令行工作得很好 - 但不是在PHP腳本?

回答

0

我不知道是否有可能在所有的,但我會嘗試是通過URL在INIT:

$ch = curl_init($url); 

然後curl_setopt。這只是一個測試建議,不保證這有幫助。所以更多的是冗長的評論。

您還可以啓用詳細模式和看到具體是什麼捲曲發送請求頭,我在這裏回答這個概述:Bad Request. Connecting to sites via curl on host and system。這應該顯示幕後發生了什麼,如果你還沒有嗅探網絡流量,這將非常有用。

+0

謝謝你,我會檢查該鏈接,看看我是否能找出發生了什麼。 – Dave

+0

看看是否可以收集詳細輸出。你可以將它添加到你的問題中,這應該使你的問題描述更加具體。 – hakre

-1

我認爲here就是答案。

「做這個來代替:

$host = "www.example.com"; 
$url = "http://$host/"; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 

+0

我假設Dave想要明確地設置不同於IP地址的'Host:'請求標頭。例如。將未解析的主機名傳遞給該IP或用於測試目的。 – hakre