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

Erro ao listar os cursos

Ao executar o código, a saída foi a seguinte no terminal:

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/lib
curl-errors.html) in I:\arquivos\cursos\alura\cursos-alura\php\composer\buscador-cursos-alura\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:201

O arquivo compose.json:

{
    "name": "leonardomorita/buscador-cursos",
    "description": "Projeto que busca os cursos do site da Alura.",
    "type": "library",
    "authors": [
        {
            "name": "leonardomorita",
            "email": "leonardomorita2@gmail.com"
        }
    ],
    "require": {
        "guzzlehttp/guzzle": "^6.5",
        "symfony/dom-crawler": "^5.0",
        "symfony/css-selector": "^5.0"
    }
}

O arquivo buscador-cursos.php:

<?php

require_once '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($html);

$cursos = $crawler->filter('span.card-curso__nome');

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

Obrigado pela ajuda.

5 respostas

Leonardo,

Boa noite,

Na criação do objeto "$crawler" experimente NÃO passar a variável "$html".

Veja o exemplo abaixo:

$crawler = new Crawler(); $crawler->addHtmlContent($html);

Bom dia, Então, já tentei fazer isso, porém, mesmo assim o erro persiste.

Acompanhar em https://cursos.alura.com.br/forum/topico-erro-na-listagem-dos-cursos-98602

solução!

Consegui resolver o problema, obrigado pessoal. Para resolver meu problema, eu li um artigo deste site (https://github.com/googleapis/google-cloud-php/issues/1821). Por fim, o meu arquivo buscador-cursos.php ficou assim:

<?php

require 'vendor/autoload.php';
require 'src/Buscador.php';

use Alura\BuscadorDeCursos\Buscador;
use GuzzleHttp\Client;
use Symfony\Component\DomCrawler\Crawler;

$client = new Client(['base_uri' => 'https://www.alura.com.br/', 'verify' => false]);
$crawler = new Crawler();

$buscador = new Buscador($client, $crawler);
$cursos = $buscador->buscar('/cursos-online-programacao/php');

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

Olá Leonardo,

Obrigado por compartilhar a solução! Vou marcar sua resposta como solução para ajudar outros com o mesmo problema a encontrá-la.

Para tentar explicar um pouco do problema, ele é causado porque a instalação do php não está configurada para utilizar SSL, assim desativando o uso do SSL no Guzzle com a opção 'verify' => false você pode evitar o erro.