我有一个奇怪的卷曲问题。示例代码如下。当我运行它时,服务器不会在CUSTOM_HEADER
数组中收到$_SERVER
标头。如果我删除CURLOPT_POSTFIELDS
选项,则会显示标题。
看起来设置CURLOPT_POSTFIELDS
会覆盖CURLOPT_HTTPHEADER
中添加的标题(但我无法在任何地方找到此文档)。那是对的吗?
改变订单似乎并不重要。我也无法通过设置其他选项来修复它。
<?php
$url = 'http://whatever.url';
$text = 'The quick brown fox jumps over the lazy dog.';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('CUSTOM_HEADER: TEST HEADER VALUE'));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('text' => $text)));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
我发布的脚本只返回$_SERVER
信息:
<?php
echo json_encode($_SERVER);
die();
在$response
数组中,我收到了大量请求标头,但没有CUSTOM_HEADER
。
是否有其他方法可以将POST
数据发送到请求中带有自定义标头的网址?
答案 0 :(得分:1)
curl端工作正常,但要获取请求标头,您应该使用getallheaders()。
如果您发布到此脚本:
<?php echo json_encode( [
'headers' => getallheaders(),
'post' => $_POST
] );
并打印$response
,如下所示:
echo "<pre>" . print_r( json_decode( $response ), 1 ) . "</pre>";
它应该显示
stdClass Object
(
[headers] => stdClass Object
(
[Host] => whatever.url
[Accept] => */*
[CUSTOM_HEADER] => TEST HEADER VALUE
[Content-Length] => 49
[Content-Type] => application/x-www-form-urlencoded
)
[post] => stdClass Object
(
[text] => The quick brown fox jumps over the lazy dog.
)
)