PHP cURL连接重置解决方案:正确绕过SSL验证
在使用 PHP cURL 发起 HTTPS 请求时,经常会遇到 CURL ERROR: Recv failure: Connection reset by peer 的报错。这通常是因为 cURL 默认严格验证 SSL/TLS 证书,而目标站点的证书环境导致握手失败。解决方法是显式关闭服务端证书验证与主机名检查。
错误原因分析
cURL 在默认情况下为了确保安全性,会对 HTTPS 站点的 SSL 证书进行严格校验。如果目标服务器的证书自签名、过期或证书链不完整,cURL 在握手阶段就会拒绝连接并抛出异常,表现为底层连接被对端重置(Connection reset)。
解决步骤
第1步:定位cURL初始化代码
打开项目中调用 curl_exec() 前的相关 PHP 文件,找到 curl_init() 返回的句柄变量,例如 $c 或 $ch。
第2步:添加SSL跳过参数
在执行请求前,使用 curl_setopt() 函数添加以下两个关键配置,以绕过证书信任检查:
// 禁用服务器端 SSL 证书验证
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
// 禁用对主机名的 SSL 验证
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
- 目的:解除因证书问题导致的握手阻断。
- 入口:
cURL选项设置方法。 - 操作:将上述两行代码插入到 curl 执行之前。
- 结果:再次请求该 HTTPS 地址,应能正常获取内容且不再报连接重置错误。
风险提示与安全建议
虽然上述方法能瞬间解决问题,但在生产环境中直接关闭 SSL 验证会降低中间人攻击的风险防御能力。建议在测试环境使用该方案,或在正式环境中配置正确的 CA 证书路径。如果必须用于生产环境,请确保通信链路本身(如内网、受信任域名)的安全性,或更新服务器根证书库。
总结
通过以上两个参数的配置,可以有效解决 PHP cURL 在访问部分 HTTPS 站点时出现的 “Connection reset by peer” 错误。以上就是关于解决 PHP cURL 报错 CURL ERROR Recv failure Connection reset by peer 的详细内容,更多关于 PHP cURL SSL 配置的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









