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

Laravel5.8中Guzzle请求自签HTTPS接口遇cURL error 60错误

解决Laravel 5.8中Guzzle请求自签名HTTPS地址的SSL证书错误

我仔细看了你的代码,问题主要出在两个地方——Guzzle请求的参数传递错误,以及SSL验证选项的设置方式没生效,这才导致你明明加了关闭SSL验证的参数,却还是遇到证书错误。下面给你一步步修正:

1. 核心问题:Guzzle request 方法的参数传错了

你现在的写法是把headers和options作为两个单独的参数传给request方法,但Guzzle的request方法签名是:

public function request($method, $uri, array $options = [])

第三个参数是包含所有配置的单一数组,包括请求头、超时、SSL设置等,分开传的话,第二个数组(你的$options)根本不会被Guzzle识别,这就是你的SSL关闭设置完全没起作用的关键!

2. 修正后的正确代码

我推荐用Guzzle官方推荐的方式关闭SSL验证(比直接用curl常量更直观可靠),同时修复参数传递问题:

public static function get($url) {
    try {
        $client = new Client();
        $options = [
            'http_errors' => true,
            'connect_timeout' => 3.14,
            'read_timeout' => 3.14,
            'timeout' => 3.14,
            'verify' => false, // 直接关闭SSL证书验证,Guzzle原生支持
            'headers' => [
                'Keep-Alive' => 'timeout=300'
            ]
        ];
        
        $result = $client->request('GET', $url, $options);
        return json_decode($result->getBody(), true);
    } catch (ConnectException $e) {
        // Logging::error($e);
        return null;
    } catch (\Exception $e) { // 建议加上通用异常捕获,避免遗漏其他错误
        // Logging::error($e);
        return null;
    }
}

3. 如果坚持要用curl选项的写法

如果你还是想用curl的常量来设置,也可以,但必须把curl数组放到$options的curl键下,并且确保整个配置数组作为第三个参数传递:

$options = [
    'http_errors' => true,
    'connect_timeout' => 3.14,
    'read_timeout' => 3.14,
    'timeout' => 3.14,
    'curl' => [
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_SSL_VERIFYPEER => false
    ],
    'headers' => [
        'Keep-Alive' => 'timeout=300'
    ]
];
$result = $client->request('GET', $url, $options);

最后提醒

关闭SSL验证只适合开发环境或者内网完全信任的服务,如果是生产环境,建议把自签名证书添加到服务器的信任列表中,然后将verify设置为证书文件的路径,这样既保证安全,又能避免证书错误。

内容的提问来源于stack exchange,提问作者code-8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:39:34