4
respostas

foreach não está retornando nada.

Olá, vi que alguns já postaram este erro que seria este aqui:

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://cursos.alura.com.br/formacao-desenvolvedor-php in C:\Users\Lucas\PhpstormProjects\PHP - Composer\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:211
Stack trace:
#0 C:\Users\Lucas\PhpstormProjects\PHP - Composer\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(158): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array)
#1 C:\Users\Lucas\PhpstormProjects\PHP - Composer\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(110): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory))

No entanto cheguei a fazer a alteração no new Client que resolveu em outro tópico e que era o seguinte:

<?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/formacao-desenvolvedor-php');

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

$cursos = $crawler->filter('span.learning-content__name');

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

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

Mas agora a execução do arquivo simplesmente não está retornando nada! Não sei se está funcionando. Mas no site atual da Alura, na lista de cursos, a classe parece ser learning-content__name mesmo. Se o problema for a classe, então qual eu deveria usar ?

O comando que estou executando é o php buscar-cursos.php

4 respostas

Dá uma olhada nesse link do stack https://stackoverflow.com/questions/24611640/curl-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate

Mas acredito que seu problema pode ser resolvido com a instalação do git que pode ser feito o download em https://git-scm.com/ porque no momento da instalação ele cria as chaves e instala o SSL

Olá, Juliano. Dei uma olhada no link e vi alguns tutoriais no youtube propondo resolver o 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://cursos.alura.com.br/formacao-desenvolvedor-php in C:\Users\Lucas\PhpstormProjects\PHP - Composer\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:211

Inclusive alterando o Path do Curl no php.ini

Depois disso desloguei da minha conta na Alura e fui na página Formação PHP sem estar logado para pegar a classe e a URL e alterei no arquivo buscar-cursos.php. Também nada mudou e o erro ainda persiste.

Também instalei o GIT, e nada feito. Na verdade eu já tinha ele instalado, mas reinstalei por desencargo de consciência.

A questão é, o problema provavelmente está no meu sistema, certo? Tem mais a ver com a requisição que é enviada daqui ou com a resposta do servidor?

Acho que o que posso fazer é ir tentando outros métodos que aparecerem e esperar que algum funcione né.

É realmente um problema no seu computador, eu tive um pareci a pouco dias e resolvi com a instalação do openssl mas isso em linux, vou ver algo pra windows.

Alterei a chamada do client novamente para

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

Já havia feito isso antes, mas agora entendo que isso serve para não fazer a verificação de SSL. Porém aí continua não retornando nada. Também testei em outros sites e o resultado é o mesmo. O mesmo também acontece se ao invés de colocar o endereço da Alura com https eu coloco só http. Nesse caso nem precisa do 'verify' = false.

Assim que eu encontrar alguma solução posto aqui.