在执行请求时,PHP的curl似乎不包含Host标头:
<?php
$handle = curl_init('http://example.com/');
curl_setopt_array($handle, array(
CURLOPT_USERAGENT => 'test ua',
CURLOPT_REFERER => 'http://example.org/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_PROXY => '127.0.0.1:8080',
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
//Doesn't work if you specify it manually or leave it out:
CURLOPT_HTTPHEADER => array(
'Host: example.com'
)
));
print_r(curl_getinfo($handle));
echo curl_exec($handle);
?>
答案 0 :(得分:0)
主机标头由curl_init()
的参数定义答案 1 :(得分:0)
当您指定请求URL时,PHP已自动Host
标头。
以下示例应足以确认:
<?php
$handle = curl_init('http://pgl.yoyo.org/http/browser-headers.php');
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($handle);
?>
输出HTML列出了请求标头,我们在其中看到Host: pgl.yoyo.org
,如预期的那样。
答案 2 :(得分:0)
这是一个完全不相关的错误,通过在用户代理中包含换行符来实现,例如:
curl_setopt_array($handle, array(
CURLOPT_USERAGENT => "user-agent\n"
));