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

使用Curl调用API失败:媒体类型‘application/x-www-form-urlencoded’不支持

问题分析:API POST请求因媒体类型不支持失败

你遇到的错误已经给出了明确指向:

{"Message":"The request entity's media type 'application/x-www-form-urlencoded' is not supported for this resource."}

问题根源

当前你的curl请求默认把CURLOPT_POSTFIELDS的内容以application/x-www-form-urlencoded(表单提交格式)发送给API,但这个接口只接受JSON格式的请求体,所以服务器返回了媒体类型不兼容的错误。

虽然你的$post变量本身是JSON字符串,但curl并没有主动告诉服务器"这是JSON数据",服务器依然按照表单格式去解析请求内容,自然无法识别。

解决方案

只需要给请求头添加一个标识,明确告知服务器请求体的格式是JSON,修改后的代码如下:

$headers = array();
// 新增Content-Type头,声明请求体为JSON格式
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: hmac ' .$websiteKey.':'.$hmac .':'.$nonce . ':'.$time;

$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl,CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($curl);
var_dump($result);
curl_close($curl);

额外小提示

如果你的$post最初是PHP数组(不是直接写死的JSON字符串),建议先用$post = json_encode($your_data_array);转换成标准JSON格式后再传入,这样能避免手动编写JSON可能出现的语法错误。

内容的提问来源于stack exchange,提问作者Kevin.a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:52:40