前言:
Goutte是一个抓取网站数据的 PHP 库。它提供了一个优雅的 API,这使得从远程页面上选择特定元素变得简单。
一、错误分析:
在请求https网站时,会出现以下错误:
SSL peer certificate or SSH remote key was not OK
直译过来就是:SSL对等证书或SSH远程密钥不正常。其实就是要对curl设置不验证证书和hosts。在curl设置如下:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
但是在Laravel或PHP中调用Goutte是直接new一个类出来的,无法直接设置curl。
use Goutte\Client
$client = new Client();
$client->request('GET', $url);
二、问题解决
通过去官方github 查看,有以下描述
如果需要使用自己的 HTTP 设置,可以创建一个 HttpClient 实例并将其传递给 Goutte。例如,要添加 60 秒的请求超时:
use Goutte\Client;
use Symfony\Component\HttpClient\HttpClient;
$client = new Client(HttpClient::create([
'timeout' => 60
]));
那想要设置CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST如何处理呢?参数如下
use Goutte\Client;
use Symfony\Component\HttpClient\HttpClient;
$client = new Client(HttpClient::create([
'timeout' => 60
'verify_peer' => false,
'verify_host' => false,
]));
如果需要查看其他HTTP设置,请看symfony文档: