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

Buscador não retorna nada | cURL error 60: SSL certificate problem: unable to get local issuer certificate

Olá, bom dia, estou tentando rodar o buscador de cursos demonstrado em aula, mas não esta me retornando nada, nem ao menos um erro :(, poderiam me ajudar?.

<?php

require 'vendor/autoload.php';

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

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

$resposta = $client->request('Get', 'https://cursos.alura.com.br/category/programacao/php');

$html = $resposta->getBody();

$crawler = new Crawler();

$crawler->addHtmlContent($html);

$cursos = $crawler->filter('span.course-card__name');

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

Oii, Guilherme.

Você está tentando fazer uma requisição para uma página da Alura que requer autenticação de usuário. Você precisa mandar a requisição para essa URL que é a mesma do curso:

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

Espero ter ajudado e bons estudos :)

solução!

Opa boa tarde, seguiu não retornando nada, eu tinha implementado esse trecho $client = new Client(['verify' => false]); devido a um erro "cURL error 60: SSL certificate problem: unable to get local issuer certificate", vi a solução em outro topico aqui: https://cursos.alura.com.br/forum/topico-php-fatal-error-uncaught-guzzlehttp-exception-requestexception-curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate-346163

O cURL error 60 parava de ocorrer, porém, mesmo concertando a url e a classe do span, nada retornava. Acabei pesquisando sobre enquanto eu aguardava uma resposta e achei essa solução:

Passo 1 - Baixar o arquivo aquivo: cacert.pem em https://curl.se/docs/caextract.html; Passo 2 - Abrir o arquivo de configuração do PHP (arquivo php.ini) > achar ;curl.cainfo = e mudar para: curl.cainfo = "C:\caminho\que\colocou\o\certificado\cacert.pem" (Coloquei na C:\PHP mesmo);

Feito isso e corrigindo a url que você me passou deu certo, não sei exatamente o que eu fiz kkkk (se alguém puder me explicar melhor, só entendi por cima se tratar de um certificado de segurança).

Segue o codigo:

<?php

require 'vendor/autoload.php';

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

$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);

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

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