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

PHP Fatal error: Uncaught GuzzleHttp\Exception\RequestException

Este problema apareceu antes quando estava fazendo o buscador sem criar a classe, me foi instruído a instalar um novo pacote e desativar a verificação de certificado do site na criação do client e funcionou, porem agora quando fui fazer o código por classe começou a aparecer os mesmos erros e desabilitar a verificação não esta resolvendo mais.

nome do arquivo:composer.json

{
    "name": "refri/buscar-cursos",
    "description": "BuscarCursosAlura",
    "type": "library",
    "authors": [
        {
            "name": "Phelipe",
            "email": "phelipeoliveira209@gmail.com"
        }
    ],
    "require": {
        "guzzlehttp/guzzle": "^7.2",
        "symfony/dom-crawler": "^4.2",
        "symfony/css-selector": "^5.2"
    }
}

nome do arquivo:BuscarCurso.php

<?php
    require 'vendor/autoload.php';
    require_once('C:\Users\pheli\OneDrive\Documentos\php\buscas\\BuscarCursos.php');


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

    $crawler = new \Symfony\Component\DomCrawler\Crawler(); 

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

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

?>

nome do arquivo:BuscarCursos.php

<?php


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

    class BuscarCursos{

        private $httpClient; 
        private $crawler;

        public function __construct(ClientInterface $httpClient, Crawler $crawler){

            $this->httpClient = $httpClient;
            $this->crawler = $crawler;

        }

        public function buscar(string $url):array{

            $resposta = $this->httpClient->request('GET', $url);

            $html = $resposta->getBody();

            $this->crawler->addHtmlContent($html);
            $elementosCursos = $this->crawler->filter('span.card-curso__nome');
            $cursos = [];

            foreach($elementosCursos as $elemento){
                $cursos[] = $elemento->textContent;

            }

            return $cursos;
        }

    }



?>
2 respostas
solução!

Olá Phelipe, bom estou utilizando o seguinte código no "buscar-cursos.php"

<?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;
}

E no "Buscador.php"

<?php

namespace Alura\BuscadorDeCursos;

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

class Buscador
{
    /**
     * @var ClientInterface
     */
    private $httpClient;
    /**
     * @var Crawler
     */
    private $crawler;

    public function __construct(ClientInterface $httpClient, Crawler $crawler)
    {
        $this->httpClient = $httpClient;
        $this->crawler = $crawler;
    }
    public function buscar(string $url): array
    {
        $resposta = $this->httpClient->request('GET', $url);

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

        $elementosCursos = $this->crawler->filter('span.card-curso__nome');
        $cursos = [];

        foreach ($elementosCursos as $elemento) {
            $cursos[] = $elemento->textContent;
        }

        return $cursos;

    }
}

No "composer.json"

{
    "name": "jefferson/buscador-cursos",
    "description": "Projeto que busca os cursos no site da Alura",
    "type": "library",
    "authors": [
        {
            "name": "toin",
            "email": "toin@gmail.com"
        }
    ],
    "require": {
        "guzzlehttp/guzzle": "^7.3",
        "symfony/dom-crawler": "^5.2",
        "symfony/css-selector": "^5.2"

    }
}

recomendo você atualizar o "symfony/dom-crawler" para a versão mais recente, basta apenas copiar o require do meu "composer.json", abrir seu terminal na pasta do seu projeto e digitar o seguinte

composer install #automaticamente baixa todas as dependências do composer.lock
composer update #para atualizar seus arquivos.

Bom espero ter ajudado e caso não tenha resolvido ao problema me responda que sempre estou olhando o fórum.

*Marque como resolvido se o problema não ocorreu mais.

Funcionou, muito obrigado :)