Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao executar arquivo de ler os cursos

Bom dia. Eu tive o seguinte erro ao executar o arquivo (e apesar de ter visto uma solução de outro tópico no fórum quero entender melhor). Erro:

PHP Fatal error:  Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://www.alura.com.br/cursos-online-programacao/php in C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:211
Stack trace:
#0 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(158): GuzzleHttp\Handler\CurlFactory::createRejection()
#1 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(110): GuzzleHttp\Handler\CurlFactory::finishError()
#2 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Handler\CurlHandler.php(47): GuzzleHttp\Handler\CurlFactory::finish()
#3 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Handler\Proxy.php(28): GuzzleHttp\Handler\CurlHandler->__invoke()
#4 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Handler\Proxy.php(48): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}()
#5 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\PrepareBodyMiddleware.php(35): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}()
#6 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Middleware.php(31): GuzzleHttp\PrepareBodyMiddleware->__invoke()
#7 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(71): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#8 C:\projetos\php\Composer-BuscadorCursosAlura\vendor\guzzlehttp\guzzle\src\Middleware.php(63): GuzzleHttp\RedirectMiddleware->__invoke()

Código:

<?php

require 'vendor/autoload.php';

use GuzzleHttp\Client;
use Symfony\Component\DomCrawler\Crawler;

$client = new Client();
$resposta = $client->request('GET', 'https://www.alura.com.br/cursos-online-programacao/php');

$html = $resposta->getBody();

$crawler = new Crawler();
$crawler->addHtmlContent($html); //Adicionando html ao leitor do dom

//tag e classe no html onde vem os cursos
$cursos = $crawler->filter('span.card-curso__nome');

foreach ($cursos as  $curso) {
    echo $curso->textContent . PHP_EOL;
}

Foi resolvido assim:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Queria entender porque passando essa informação no construtor, resolveu o problema?

2 respostas
solução!

Karolina, isso é um detalhe do cURL. A ferramenta cURL usa uma chave local para validar os certificados SSL dos servidores. São detalhes mais complexos de criptografia. Como sua instalação não possui essa chave local, o cURL não consegue validar o certificado. A solução "ideal" seria baixar essa chave (que está disponível no site da lib cURL) e configurar seu PHP para ler a mesma, mas esse erro via de regra ocorre apenas no Windows, ou seja, não vai acontecer em produção. Sendo assim, para agilizar o processo e permitir que continue o treinamento sem problemas, podemos simplesmente instruir o Guzzle (que usa cURL por baixo dos panos) que ele não precisa validar o certificado SSL.

Entendi. Ok obg!