微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 无法使用CURL请求设置“主机:”标头

我试图通过一些基本的身份验证(通过发送加密的头)来发出CURL请求.但是,当我尝试设置“Host:_”标头时,远程服务器响应:

Bad Request: Your browser sent a request that this server Could not understand.

这是进行CURL调用代码.请注意,只要我在$http_header变量中注释掉“Host:url”标头,它就会起作用.但是,它在目标服务器上用作身份验证过程的一部分,因此我不能简单地将其删除.

    $curl = curl_init();

    $opt = array(
        CURLOPT_URL=>$url,
        CURLOPT_RETURNTRANSFER=>1,
        CURLOPT_HTTPHEADER=>$http_header,
        CURLOPT_POST=>1,
        CURLOPT_POSTFIELDS=>$data_params,
        CURLOPT_CONNECTTIMEOUT=>5, // Timeout to 5 seconds
    );
    curl_setopt_array($curl, $opt);

    // $output contains the output string
    $output = curl_exec($curl);

    // it closes the session
    curl_close($curl);

$http_header(一个关联数组)的内容

array
  0 => string 'Host: http://localhost/work/myproject'
  1 => string 'Content-Type: multipart/form-data'
  2 => string 'X-Authorization: Basicauth Z2xZjA2YzJhMzIxYTI1ZmIzZTgxYQ=='

解决方法:

Host标头不接受完整的URL,只接受主机名.

在这种情况下,解决方案是替换此标头:

"Host: $url"

有:

"Host: ". parse_url($url, PHP_URL_HOST) ."

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐