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

Postman中正常运行的API在PHP CURL中无法调用求助

排查建议与解决方案

核心问题定位

你的PHP CURL代码和Postman请求的关键差异在于缺少Content-Type: application/json请求头,同时没有正确输出调试日志来定位问题。


具体排查步骤

  • 强制添加JSON请求头:Postman发送JSON格式请求时会自动携带Content-Type: application/json,但你的代码注释掉了这个配置,服务器无法识别请求体格式,导致处理失败。
  • 输出CURL调试日志:开启CURLOPT_VERBOSE后,需要将日志输出到可见位置,才能看到请求过程中的错误(比如HTTP状态码、服务器返回的错误信息)。
  • 修复错误的代码细节:代码中len($data)是无效函数,PHP中字符串长度用strlen(),不过CURL会自动计算Content-Length,无需手动设置。
  • 谨慎关闭SSL验证:CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER设为0会跳过证书验证,仅适合测试环境,生产环境建议配置正确的CA证书。

修复后的完整代码

<?php
$data = [
    'prompt' => "write me a poem",
    'use_buffer' => 1
];

$api_url = "https://myserver.com";

$ch = curl_init();

// 生产环境建议移除这两行,配置正确的SSL证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

// 必须添加的JSON请求头
$headers = [
    'Accept: application/json',
    'Content-Type: application/json'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// 输出调试日志到屏幕
$verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $verbose);

$response = curl_exec($ch);

// 打印调试日志
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
echo "Verbose Log:\n" . $verboseLog . "\n";

if(curl_errno($ch)){
    echo "CURL Error: " . curl_error($ch);
}

curl_close($ch);
var_dump($response);
print("<br>");
?>

额外调试技巧

  • 对比Postman的请求详情:在Postman中点击「Code」按钮,选择PHP - cURL,直接生成标准请求代码,和你的代码逐行对比差异。
  • 检查HTTP状态码:用curl_getinfo($ch, CURLINFO_HTTP_CODE)获取响应状态码,4xx表示客户端请求错误,5xx表示服务器端错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:49:57