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
相关产品推荐
相关产品推荐

