我正在尝试使用 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,相同的正文,并且工作正常
正如@CBroe 所指出的:
您传递的标头格式错误。引用关于curl_setopt的PHP文档:“CURLOPT_HTTPHEADER:要设置的HTTP头字段数组,格式为数组('Content-type:text/plain','Content-length:100')”
这是我修复的代码:
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json"
));