PHP curl不解析本地主机名

时间:2017-12-28 00:31:32

标签: php curl nginx

我正在使用Windows机器的hosts文件中定义的多个本地主机名。

例如:localhost,admin_a,admin_b等

我想在这样的本地主机名上通过PHP执行curl,但是执行挂起并且没有返回结果。

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_URL, 'http://localhost');
curl_setopt($ch, CURLOPT_RESOLVE, [ 'localhost:80:127.0.0.1']);
$output = curl_exec($ch);

我尝试使用选项CURLOPT_RESOLVE(未在php.net上记录),但它似乎没有帮助。

另一方面,bash控制台中的curl命令行立即起作用:

curl http://localhost

如何让PHP curl返回本地定义的主机名?

服务器:nginx

更新

php控制台返回:

Rebuilt URL to : http://localhost/
Trying ::1...
TCP_NODEDELAY set
Trying 127.0.0.1...
TCP_NODEDELAY set
Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
Host: localhost
Accept: */*

然后没有任何反应,页面只是悬空而已。

1 个答案:

答案 0 :(得分:1)

默认情况下,curl尝试根据url猜测协议,我最好的猜测是,它无法猜测admin_a的协议 - 如果你将curl命令更改为你可能会遇到同样的问题curl admin_a,无论如何,将你的setopt更改为curl_setopt($ch, CURLOPT_URL, 'https://admin_a'); - 或者,明确告诉curl CURLOPT_DEFAULT_PROTOCOL使用什么,例如curl_setopt($ch,CURLOPT_DEFAULT_PROTOCOL,'https');