我有一个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 :(得分: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);
“