0

执行请求时,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);
?>
4

3 回答 3

0

主机头由curl_init ()的参数定义

于 2012-06-28T20:36:16.270 回答
0

Host您指定请求 URL 时,标头已由 PHP 自动生成。

以下示例应该足以确认:

<?php
$handle = curl_init('http://pgl.yoyo.org/http/browser-headers.php');
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);

echo curl_exec($handle);
?>

Host: pgl.yoyo.org输出 HTML按预期列出了请求标头,其中我们看到了 。

于 2012-06-28T20:38:50.560 回答
0

这是一个完全不相关的错误,它是由用户代理内部的换行符发生的,例如:

curl_setopt_array($handle, array(
    CURLOPT_USERAGENT => "user-agent\n"
));
于 2012-06-28T21:04:25.320 回答