本地可正常运行的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
相关产品推荐
相关产品推荐

