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

本地可正常运行的Curl请求在生产域名环境无法执行

Curl请求本地正常但生产环境失效的排查与解决

Hey,看起来你遇到了本地跑的好好的curl请求,一部署到生产环境就罢工的问题,结合你贴的PHP代码,我给你列几个优先级最高的排查方向:

1. 先确认生产服务器能不能连到目标API

生产环境的网络限制可比本地严多了,大概率是网络不通:

  • 登录到生产服务器,直接跑命令行curl测试:
    curl -v http://182.191.78.79:92/api/ERP/Login?UserName=xxx&Password=xxx&LocationId=
    
    看是超时、连接被拒绝,还是能拿到正常响应。
  • 如果是云服务器,检查下安全组/防火墙:生产服务器的出站规则有没有开放92端口?目标API服务器的入站规则有没有允许生产服务器的IP访问?

2. 注释掉的认证头是不是关键?

你代码里把Authorization: Bearer的请求头给注释掉了!本地测试环境可能没做严格校验,但生产环境的API十有八九需要这个认证才能访问。赶紧把这两行注释取消:

$request_headers[] = 'Authorization: Bearer ' . $secretKey;
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);

这应该是最常见的坑之一。

3. URL里的&可能搞砸参数解析

你写的URL里用了HTML转义后的&代替&,本地可能因为PHP的自动处理蒙混过关,但生产环境的服务器配置可能不会自动转回来,导致API接收到的参数乱掉。直接把URL改成:

$url="http://182.191.78.79:92/api/ERP/Login?UserName=xxx&Password=xxx&LocationId=";

4. 加个调试日志,拿到更具体的错误信息

光看当前的错误输出不够,在生产环境的代码里加几行调试,把HTTP状态码和原始响应打出来:

$data = curl_exec($ch);
// 新增:打印HTTP状态码
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "HTTP Status: " . $http_status . "\n";

if (curl_errno($ch)) {
    print "Curl Error: " . curl_error($ch) . "\n";
    print "Error Code: " . curl_errno($ch) . "\n";
} else {
    // 新增:先打印原始响应,避免json_decode失败看不到内容
    echo "Raw Response: " . $data . "\n";
    $transaction = json_decode($data, TRUE);
    curl_close($ch);
    var_dump($transaction);
}

比如如果拿到401状态码,那就是认证的问题;404就是路径错了;500就是API服务器内部出问题,这些信息能帮你快速定位。

小提醒:关于SSL的设置

你代码里加了CURLOPT_SSL_VERIFYPEER, false,但目标URL是HTTP协议,这行其实没用。如果之后API改成HTTPS,这个设置会有安全风险,到时候记得调整,但当前先聚焦HTTP的问题就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:22:57