You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用cURL POST提交JSON数据出现Content-Type不支持错误如何解决

错误产生原因

  • 你误用了cURL参数:设置请求头应该使用CURLOPT_HTTPHEADER参数,你错误写成了CURLOPT_HEADER。CURLOPT_HEADER是布尔类型的配置项,作用是控制返回结果是否包含响应头,给该参数传入请求头数组不会生效,因此你配置的Content-Type:application/json请求头没有实际发送到服务端。cURL默认会给POST请求加上application/x-www-form-urlencoded的请求头,和服务端要求的JSON格式不兼容,因此触发报错。
  • 额外问题:如果你的$params变量传入的是PHP数组而非已经编码完成的JSON字符串,cURL会自动将数组转换为表单格式的字符串,也会导致请求内容不符合服务端要求。同时你给出的示例JSON末尾多了多余的逗号,手动构造JSON时需要删除避免格式错误。

修复方案

修改cURL配置参数,同时确保POST内容是编码后的JSON字符串,修正后的代码如下:

public static function curlValidation($url, $params) {
    $ch = curl_init();

    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    // 原错误:用CURLOPT_HEADER设置请求头,修正为CURLOPT_HTTPHEADER
    curl_setopt($ch,CURLOPT_HTTPHEADER, array("Accept:application/json", "Content-Type:application/json"));
    curl_setopt($ch,CURLOPT_POST, true);
    // 如果$params是PHP数组,需要先转成JSON字符串,已经是JSON的话可以跳过json_encode
    curl_setopt($ch,CURLOPT_POSTFIELDS, is_array($params) ? json_encode($params) : $params);

    $result = curl_exec($ch);
    if($result === false)
        return curl_error($ch);

    curl_close($ch);
    return $result;
}

如果是手动构造JSON传入$params,需要删除示例JSON末尾的多余逗号,修正后的JSON为:

{
   "NIK":"123",
   "NAMA":"ASD",
   "TGL_LHR":"123"
}

内容的提问来源于stack exchange,提问作者revi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:39:03