我正在使用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: */*
然后没有任何反应,页面只是悬空而已。
答案 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');