php curl 未发送 headers

php curl not sending headers

我正在尝试使用 php curl 发送 headers - 这应该很简单 - 但似乎有问题。

运行 on PHP 7.2 我将 header 设置为

curl_setopt($ch, CURLOPT_HTTPHEADER, array('My-custom-header-name' => 'Header-Value'));

当尝试在 curl_exec 和

之前打印信息时
curl_getinfo($ch);

我得到以下结果:

header 部分仍然是空的,是因为它显示响应 headers 吗?如果是,如何确保 header 设置正确?

我可以访问我试图到达的远程地址,我可以看到,嗯,看不到,之前设置的 headers。在调查其他地方之前,我想确保它们已附加到 curl 请求。

同样的请求从本地地址到远程地址工作正常,php 7.1 和 7.2 之间是否有我不知道的变化?

编辑: 我添加了

curl_setopt($ch, CURLINFO_HEADER_OUT, true);

但现在是:

curl_getinfo($ch, CURLINFO_HEADER_OUT);

给予

POST /someurl HTTP/1.1
Host : Some host
Accept: */*
Content-Length: 153
Content-Type: application/x-www-form-urlencoded

我没有看到我的自定义 headers。

非常感谢您的宝贵时间。

您需要为请求 headers 使用选项 CURLINFO_HEADER_OUT

This is only set if the CURLINFO_HEADER_OUT is set by a previous call to curl_setopt().

查看 documentation 了解所有可用的选项标志。

你的数组实际上应该是一个行数组!不是不同对象的数组。

所以,这应该成功了。

array(
    'My-custom-header-name: Header-Value'
    )

像这样:

curl_setopt($ch, CURLOPT_HTTPHEADER,     array(
        'My-custom-header-name: Header-Value'
        ));

我纠结了大约 15 分钟才发现:我的 headers 的语法是错误的!

Header-Name: Header-Value

是正确的语法。如果您将它包含在命令行中,就像这样,

curl -H "Header-Name: Header-Value"

一定要在需要的地方转义字符(Windows 和 Linux 在这里非常不同)。如果你的 headers 在一个文件中,那就容易多了:

curl -H @headerFile.txt

通过在详细输出中包含 -v(小写)来验证您的请求:

curl -v