没有设置主机头

时间:2013-01-06 22:45:23

标签: php curl

我有一个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脚本中?

2 个答案:

答案 0 :(得分:0)

我不知道是否有可能,但我会尝试在init处传递URL:

$ch = curl_init($url);

然后使用curl_setopt 。这只是一个测试的建议,不保证这有帮助。这是一个冗长的评论。

您还可以启用详细模式,查看特定curl为请求标头发送的内容,我已在此处的答案中概述了这一点:Bad Request. Connecting to sites via curl on host and system。这应该显示幕后发生的事情,如果你还没有嗅到网络流量,那将非常有用。

答案 1 :(得分:-1)

我认为here就是答案。

“请改为:

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

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url);