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 脚本中?

4

2 回答 2

0

我不知道这是否可能,但是我会尝试在初始化时传递 URL:

$ch = curl_init($url);

然后curl_setopt. 这只是一个测试建议,不能保证这会有所帮助。所以更冗长的评论。

您还可以启用详细模式并查看curl 为请求标头发送的具体内容,我在此处的答案中对此进行了概述:错误请求。通过主机和系统上的 curl 连接到站点。这应该显示幕后发生的事情,如果您尚未嗅探网络流量,这将非常有用。

于 2013-01-06T22:50:35.540 回答
-1

我想就是答案。

“改为这样做:

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

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 

"

于 2013-01-06T22:52:12.050 回答