在PHP 5中使用cURL发布JSON数据

时间:2016-11-01 16:56:10

标签: php json curl

我正在尝试使用cURL发布一些JSON数据,但是我在设置标题时遇到了问题。

我目前的代码如下:

$ch = curl_init('https://secure.example.com');

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string)
]);

if (!$result = curl_exec($ch))
{
    echo 'Failed: ' . curl_error($ch);
    curl_close($ch);
    die;
}

curl_close($ch);

使用localhost(PHP 7)进行测试时,此代码可以正常工作。但是,我们的Web服务器只运行PHP 5,因此不支持CURLOPT_HTTPHEADER选项。

当我将其保存在我的代码中时,我收到“500内部错误”。 当我拿出它时,我的curl_exec()没有运行,我收到错误消息“失败:”但没有显示curl_error()

有没有办法设置cURL以期望没有此选项的JSON数据?

2 个答案:

答案 0 :(得分:1)

替换此

curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)
]);

使用

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string)
));

PHP 5.4+支持[]的新数组语法,但PHP< 5.4需要array()

PHP 5.4 http://php.net/manual/en/migration54.new-features.php

中添加了短数组语法支持

答案 1 :(得分:1)

您遇到的问题与CURLOPT_HTTPHEADER无关。它已经在PHP中使用了很长时间。

但是PHP 5.4中添加了新的数组语法[]

将您的代码更改为:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string)
));

它会正常工作。