如何忽略 Guzzle 5 中的无效 SSL 证书错误

Posted

技术标签:

【中文标题】如何忽略 Guzzle 5 中的无效 SSL 证书错误【英文标题】:How to ignore invalid SSL certificate errors in Guzzle 5 【发布时间】:2015-03-19 22:11:34 【问题描述】:

这应该是一件容易的事。我可以在 Guzzle 3 中找到很多关于如何做到这一点的参考资料,但它们在 Guzzle 5 中不起作用。

到目前为止我在做什么:

$this->client = new GuzzleClient(['defaults' => [
    'verify' => 'false'
]]);

虽然我收到此错误但发送请求时:

RequestException in RequestException.php line 51:
SSL CA bundle not found: false

我在 google 上找不到有关此错误的任何有用参考。如果我可以访问 curl 选项,那么我可以尝试类似此处建议的解决方案(适用于 Guzzle 3,因此它不起作用):http://inchoo.net/dev-talk/symfony2-guzzle-ssl-self-signed-certificate/,其相关部分是:

$req->getCurlOptions()->set(CURLOPT_SSL_VERIFYHOST, false);
$req->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, false);

【问题讨论】:

好吧,显然我只是不擅长阅读文档。最终找到了这个:docs.guzzlephp.org/en/latest/… 【参考方案1】:

你应该使用

$this->client = new GuzzleClient(['defaults' => [
    'verify' => false
]]);

即布尔值 false,而不是字符串 'false'

文档在这里: https://docs.guzzlephp.org/en/5.3/clients.html#verify

注意:有些人给出了适用于 Guzzle 6+ 的其他答案。如果您使用这些版本,它们是很好的答案(但最初的问题是关于 Guzzle 5)。

【讨论】:

defaults 实际上不是 Guzzle 5 客户端配置的一部分。你应该使用: $this->client = new GuzzleClient([ 'verify' => false ]); Docs页面稍微改成:guzzle.readthedocs.io/en/latest/request-options.html#verify 澄清一下,这个答案特定于 Guzzle 5(问题中提到的版本),它确实有 defaults(请参阅 docs.guzzlephp.org/en/5.3/clients.html)。【参考方案2】:

尝试使用有效的更新版本:

$this->client = new GuzzleClient(['base_uri' => 'https://api.example.com/', 'verify' => false ]);

或更简单的版本:

    $this->client = new GuzzleClient(['verify' => false ]);

使用 6.2-dev 版本测试。

【讨论】:

【参考方案3】:

实际版本是正确的

$this->client = new GuzzleClient(['verify' => false ]);

在 2018 年,这不起作用:

$this->client = new GuzzleClient(['defaults' => [
    'verify' => false
]]);

【讨论】:

【参考方案4】:

你可以在新的 laravel 客户端版本中使用

$http = new Client(['verify' => false]);

【讨论】:

这是 Guzzle 较新版本的正确答案。

以上是关于如何忽略 Guzzle 5 中的无效 SSL 证书错误的主要内容,如果未能解决你的问题,请参考以下文章

如何让 ruby​​ 的 xmlrpc 客户端忽略 SSL 证书错误?

如何忽略 Newman 中的 SSL 证书错误

将 Curl 客户端 ssl 移动到 Guzzle

忽略 Apache HttpClient 4.3 中的 SSL 证书

Guzzle Curl 错误 60 SSL 无法获取本地发行者

忽略 Servlet 中的 SSL 证书