PHP CURLOPT_HTTPHEADER无法发送"授权"

时间:2017-08-08 13:36:25

标签: php curl

作为最小测试用例,使用PHP 5.6.31版,cURL 7.54.0:

<?php

$headers = array('Authorization: B', 'c : d');
$ch = curl_init("https://ipandheaders.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_exec($ch);
curl_close ($ch);

?>

该网站反映了已发送的标头:

Accept: */*
C: d
Host: ipandheaders.com

如果我故意拼错它:

$headers = array('Authorizationx: B', 'c : d');

结果是

Accept: */*
Authorizationx: B
C: d
Host: ipandheaders.com

$headers = array('Authorizatio: B', 'c : d');

给出

Accept: */*
Authorizatio: B
C: d
Host: ipandheaders.com

使用更真实的标题(使用虚假标记)

$headers = array('Authorization: Bearer JHG56HJGOJ8JH876F', 'c : d');

没有帮助。

Accept: */*
C: d
Host: ipandheaders.com

错误日志显示没有错误。

我的方法似乎在这里有效: How to include Authorization header in cURL POST HTTP Request in PHP? 但那是5年前的事了。有什么变化吗?

我试过POSTing

curl_setopt($ch, CURLOPT_POST, 1);

但因某些看似无关的原因而得到403 Forbidden错误,所以我不知道POST的结果。

PHP是否只允许POST中的Authorization标头?我可以用Python做我想做的事情&#39;请求&#39;使用GET没有问题。

如果PHP的cURL扩展程序故意禁止任何授权标头,我不会看到http://php.net/manual/en/function.curl-setopt.php显示的内容,但 tychay 的评论似乎在说是这样。

1 个答案:

答案 0 :(得分:0)

不确定这是否有帮助:

  

从7.58.0开始,除非使用CURLOPT_UNRESTRICTED_AUTH选项明确允许,否则libcurl将专门阻止将“ Authorization:”标头发送到第一个使用的主机之外的其他主机。

来源:https://curl.haxx.se/libcurl/c/CURLOPT_HTTPHEADER.html

根据以上所述,您可能需要包括CURLOPT_UNRESTRICTED_AUTH选项:

curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);