PHP中使用Curl连接指定URL失败求助:连接被拒绝
解决PHP Curl连接目标URL时出现"Connection refused"的问题
我来帮你一步步排查这个连接拒绝的问题,这种情况通常是网络层面或者配置细节的问题,咱们逐一梳理:
1. 先修正代码里的低级拼写错误
你的代码里有一处明显的笔误:url_setopt($ch, CURLOPT_URL, $url); 应该是 curl_setopt($ch, CURLOPT_URL, $url); —— 少写了一个curl前缀。这个错误可能导致URL配置没生效,先修正它,避免后续排查干扰。
2. 排查网络连通性(最关键的一步)
Connection refused 本质是你的服务器无法和目标服务器的6700端口建立TCP连接,先通过命令行工具验证基础连通性:
- 在你的PHP服务器上执行:
telnet b2b-dev.cenveo.com 6700- 如果提示
Connection refused,说明目标端口确实没开放,或者服务器/防火墙拦截了请求
- 如果提示
- 或者用curl命令行测试:
curl -v http://b2b-dev.cenveo.com:6700/dmz/EZComm?fromTp=DiscountLabelsCustomer&toTp=DiscountLabels&operationID=DiscountLabels/1.0/PurchaseOrderRequest
如果命令行也连不上,那问题不在PHP代码,而是:
- 目标服务器的6700端口未对外开放(比如开发环境服务器未启动、端口配置错误)
- 你的服务器和目标服务器之间有防火墙(公司内网防火墙、云服务器安全组)拦截了6700端口的请求
- 目标域名解析有问题,可以先ping
b2b-dev.cenveo.com确认解析到的IP是否正确
3. 清理不必要的SSL配置
你的目标URL是http://协议,但代码里配置了多个HTTPS相关的选项:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch, CURLOPT_SSLVERSION, 3);
这些配置对HTTP请求完全没用,反而可能引发不必要的逻辑干扰,建议全部移除。
4. 检查代理设置(如果你的服务器需要代理上网)
如果你的PHP服务器处于内网,需要通过代理访问外部网络,那你需要给curl添加代理配置:
curl_setopt($ch, CURLOPT_PROXY, '你的代理IP'); curl_setopt($ch, CURLOPT_PROXYPORT, 代理端口); // 如果代理需要认证 curl_setopt($ch, CURLOPT_PROXYUSERPWD, '用户名:密码');
5. 增加更详细的调试日志
可以在代码里添加获取curl错误码和详细信息的逻辑,帮助定位:
$output = curl_exec($ch); if ($output === false) { echo 'Curl错误码: ' . curl_errno($ch) . '<br>'; echo '错误信息: ' . curl_error($ch) . '<br>'; // 获取请求的详细信息 var_dump(curl_getinfo($ch)); }
先从网络连通性排查入手,这是这类问题最常见的根源,再结合代码细节修正,应该能解决问题。
内容的提问来源于stack exchange,提问作者Muhammed Basheer
相关产品推荐
相关产品推荐

