php CURL 错误:请求负载不是 JSON

问题描述 投票:0回答:1

我正在尝试使用 php 的 CURL 库与 Api 进行交互

这是我的代码:

$fields = array(
    'aaaaa' => 'aaaaa', 
    'bbbbb' => 'bbbbb', 
    'ccccc' => 'ccccc', 
    'ddddd' => 'ddddd'
);

$fields_json = json_encode($fields);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $this->api_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_json);

// var_dump($fields_json);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type" => "application/json"
));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$result = json_decode(curl_exec($ch), true);

由于函数返回 NULL,我尝试

var_dump
变量
$result
,这就是我得到的:

array(1) { ["message"]=> string(27) "Request payload is not JSON" }

我尝试寻找解决方案,但我看到的每一页都说这是正确的方法,我错过了什么?

谢谢您!

(17/01/2024 11:00:00)编辑:

我也尝试使用 VSCode 的 ThunderClient 扩展发出相同的请求,相同的 url,相同的正文,并且工作正常

php json curl post request
1个回答
0
投票

正如@CBroe 所指出的:

您传递的标头格式错误。引用关于curl_setopt的PHP文档:“CURLOPT_HTTPHEADER:要设置的HTTP头字段数组,格式为数组('Content-type:text/plain','Content-length:100')”

这是我修复的代码:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        "Content-Type: application/json"
    ));
© www.soinside.com 2019 - 2024. All rights reserved.