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

API请求在Postman、Resteasy可用,PHP cURL调用报500错误求助

排查PHP cURL调用API出现500错误的问题

我来帮你捋一捋这个问题——Postman和Resteasy都能正常请求,但PHP cURL跑就出500,大概率是请求的细节没对齐,咱们一步步排查:

1. 最可能的原因:缺失Content-Type请求头

Postman在发送JSON请求时,会自动添加Content-Type: application/json头,但生成的PHP cURL代码里漏掉了这个关键配置!服务器收到请求后,没法识别请求体是JSON格式,直接抛出500错误。

2. 手动转义JSON容易出问题

你代码里的CURLOPT_POSTFIELDS是手动转义的字符串,很容易因为转义不全或者格式错误导致服务器解析失败。用PHP的json_encode()来生成JSON字符串更可靠,能避免这类低级错误。

3. 错误信息捕获不全

目前的代码只捕获了cURL本身的错误,但HTTP 500是服务器端错误,你需要获取HTTP状态码和服务器返回的具体错误信息,才能知道问题出在哪。

修改后的代码示例

把这些问题都修复后的代码应该是这样的:

$curl = curl_init();

// 先把请求数据写成PHP数组,再转成JSON,避免手动转义出错
$postData = [
    [
        "phone_number" => "40404",
        "message" => "whois @akborodo",
        "device_id" => 82531
    ]
];

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://smsgateway.me/api/v4/message/send",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode($postData), // 用json_encode生成标准JSON
    CURLOPT_HTTPHEADER => array(
        "authorization: <api-key>",
        "cache-control: no-cache",
        "Content-Type: application/json" // 必须添加这个头!
    ),
    CURLOPT_VERBOSE => true, // 开启详细日志,方便排查请求细节
));

$response = curl_exec($curl);
$err = curl_error($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); // 获取HTTP状态码

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo "HTTP状态码: " . $httpCode . "<br>";
    echo "服务器响应: " . $response;
}

下一步排查

如果修改后还是有问题,你可以:

  • 查看CURLOPT_VERBOSE输出的详细请求日志,对比Postman里的请求头和请求体,看是否还有差异(比如编码、额外的请求头)
  • 检查服务器返回的响应内容,哪怕是500错误,服务器通常会返回具体的错误描述,帮你定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:10:58