前言:

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文档:

Framework Configuration Reference (FrameworkBundle) (Symfony Docs)https://symfony.com/doc/current/reference/configuration/framework.html#reference-http-client

 

原文链接:

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。