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

PHP CURL发送RAW参数POST请求返回NULL的原因及解决方法

问题排查与解决方案

我来帮你梳理下为啥会得到NULL结果,你的代码里有几个关键错误导致REST API无法正确解析你的请求,具体问题和修复方法如下:

核心错误点

  • 参数数组格式完全错误:你定义的$param不是PHP有效的关联数组,而是把键值对写成了字符串元素(比如"account: 080000xxx"),这种写法根本没法被正确转成JSON。另外newPassword字段的语法也错了,你把.md5($pass).写在了字符串内部,这不会执行MD5加密,只会把这段文本当成密码的一部分。
  • 请求格式不匹配:你设置了Content-Type: application/json,但直接把数组传给CURLOPT_POSTFIELDS,此时CURL会默认把数组编码成application/x-www-form-urlencoded或multipart/form-data格式,和你声明的JSON格式完全冲突,API自然解析不到参数,返回NULL。

正确的RAW JSON POST请求代码

$urlsp = "https://xxx/xxx/forgotpassword/xxx";
// 注意请求头不要加多余空格,冒号后一个空格即可
$header = array(
    "X-Application-Token: 123er",
    "Content-Type: application/json"
);
// 定义正确的关联数组参数
$param = array(
    "account" => "080000xxx",
    "secretQuestion" => "",
    "secretAnswer" => "",
    "newPassword" => md5($pass), // 直接调用md5函数,不要嵌套在字符串里
    "issuer" => 567800
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $urlsp);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);
// 关键:把关联数组转成JSON字符串,这才是RAW格式的请求体
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($param));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 可选:生产环境建议开启SSL验证,本地测试可暂时关闭
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$json_data = curl_exec($ch);

// 排查CURL自身错误(比如网络问题、SSL错误)
if (curl_errno($ch)) {
    echo "CURL请求错误:" . curl_error($ch);
}

curl_close($ch);
$data = json_decode($json_data);
// 打印返回结果便于调试
var_dump($data);

额外排查技巧

  • 用curl_errno()和curl_error()可以快速判断是请求发送失败(比如网络不通、SSL验证失败)还是API返回了异常内容,这能帮你区分是CURL的问题还是API的问题。
  • 可以先用Postman等工具模拟相同的请求,确认API本身能正常响应后,再对比Postman的请求头、请求体格式调整你的代码。
  • 确保json_encode($param)能生成有效的JSON字符串,比如如果参数里有特殊字符,可能需要设置JSON_UNESCAPED_UNICODE等选项。

内容的提问来源于stack exchange,提问作者kurama-rho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:47:11