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

