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

Node.js API无法读取PHP CURL请求数据,Postman请求正常

PHP CURL 调用Node.js API无响应排查方案

我尝试用PHP CURL向Node.js API发送POST请求,但完全收不到响应。这个API用Postman测试是正常的,我的代码如下:

$username   =   trim($this->request->getVar('username'));
$password   =   $this->request->getVar('password');
$data       =   json_encode(array("email"=>$username,"password"=>$password));

$curl       = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => API_URL.'/user/login',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>$data,
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json',
    'Accept: application/json',
    'Content-Length: ' . mb_strlen($data)
  ),
));

$response = curl_exec($curl);

排查步骤及修复建议

  • 先查CURL错误信息:curl_exec后一定要加错误检测,否则根本不知道哪里出问题。添加以下代码:
    if(curl_errno($curl)){
        echo 'CURL错误:' . curl_error($curl);
    }
    curl_close($curl);
    
  • 移除手动设置的Content-Length:CURL会自动计算并设置正确的字节长度,用mb_strlen得到的是字符数,不是字节数,当JSON包含中文等多字节字符时会导致长度不匹配,API可能直接丢弃请求。
  • 设置合理的超时时间:CURLOPT_TIMEOUT => 0会导致无限等待,改成30秒左右的合理值,避免脚本挂死。
  • 核对请求地址和Postman完全一致:确认API_URL包含正确的http://或https://,路径、端口和Postman里的完全相同,没有拼写错误。
  • 检查JSON编码是否成功:json_encode可能因为特殊字符失败,添加检测:
    if($data === false){
        echo 'JSON编码失败:' . json_last_error_msg();
        exit;
    }
    
  • 匹配Postman的请求头:有些API会校验User-Agent等头信息,把Postman里的请求头原样加到CURL的CURLOPT_HTTPHEADER里,比如添加'User-Agent: PostmanRuntime/7.32.3'。

修改后的示例代码

$username = trim($this->request->getVar('username'));
$password = trim($this->request->getVar('password'));
$data = json_encode(["email" => $username, "password" => $password]);

// 检查JSON编码
if ($data === false) {
    die('JSON编码错误: ' . json_last_error_msg());
}

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => API_URL . '/user/login',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30, // 合理超时
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Accept: application/json',
        'User-Agent: PHP-CURL/7.4' // 和Postman保持一致
    ],
]);

$response = curl_exec($curl);

// 检查CURL错误
if (curl_errno($curl)) {
    die('CURL错误: ' . curl_error($curl));
}

curl_close($curl);

// 打印响应调试
var_dump($response);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:24:24