2013-01-06 71 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