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

Windows10环境下Laravel调用API遇cURL error 35问题求助

问题原因及解决方法

核心原因

这个错误的本质是PHP 8.x配套的OpenSSL 3.0+版本默认禁用了不安全的旧版SSL协商机制,而IBGE的API服务器目前仍在使用这类不符合RFC 5746标准的协商方式。

PHP 7.4通常搭配的是OpenSSL 1.x版本,该版本没有强制启用这种安全限制,所以能正常完成请求。

解决方法

方法1:在请求中添加cURL参数(推荐,无需修改全局配置)

在Laravel的HTTP客户端请求里,通过自定义cURL选项放宽SSL安全等级:

// Laravel HTTP客户端示例
$response = Http::withOptions([
    'curl' => [
        CURLOPT_SSL_CIPHER_LIST => 'DEFAULT@SECLEVEL=1',
        CURLOPT_SSL_ENABLE_ALPN => false,
    ],
])->get('https://servicodados.ibge.gov.br/api/v1/localidades/estados');

如果是用原生cURL函数,写法如下:

$ch = curl_init('https://servicodados.ibge.gov.br/api/v1/localidades/estados');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 放宽SSL安全等级,允许旧版协商
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'DEFAULT@SECLEVEL=1');
// 禁用ALPN协商(部分旧服务器不支持)
curl_setopt($ch, CURLOPT_SSL_ENABLE_ALPN, false);

$response = curl_exec($ch);
curl_close($ch);

方法2:修改全局OpenSSL配置(影响所有PHP请求)

找到PHP安装目录下的openssl.cnf(Windows下可能是openssl.cfg),定位到[system_default_sect]区块,添加或修改以下配置:

MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1

修改完成后,重启你的Web服务(Apache、Nginx或PHP-FPM)即可生效。

方法3:降级OpenSSL版本(不推荐)

如果上述方法都无法解决,可以考虑将PHP 8.x配套的OpenSSL降级到1.x版本,但这会降低整体的SSL安全性,仅作为临时应急方案。

内容的提问来源于stack exchange,提问作者Bruno Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:17:28