Requisições em PHP usando cURL

Utilize requisições em PHP usando cURL para incluir dados externos em suas aplicações

Guilherme Donizetti
6 min readApr 30, 2022

Olá, espero que você esteja bem!

Gostaria de compartilhar com você as vantagens e facilidades de usar dados externos à sua aplicação através de requisições de forma bem simples. Através do cURL conseguimos fazer isso, e aqui vou explicar usando o PHP e Ajax. Vamos entender melhor?

Photo by Guillermo Velarde on Unsplash

A princípio vamos conhecer a ferramenta cURL. Em seguida vamos aplicar isso para consultar todas as cidades de um estado X para criar selects dinamicamente, a fim de praticar 😃.

cURL

Em uma explicação direta e reta: é um recurso que permite fazer requisição em uma URL usando o protocolo HTTP!

Mas na verdade, o cURL não se limita a isso. Com ele podemos fazer configurações referentes a nossa requisição, como por exemplo: definir o método HTTP que queremos usar, informar tokens para autenticação (x-api-key, por exemplo), permitir ou não transferência de arquivos na comunicação, entre outras coisas.

Vale lembrar que o cURL pode ser usado também em outros protocolos da camada de Aplicação do TCP/IP. Se você não se lembra bem das aulas de Redes… Ele funciona com os protocolos FTP, SMTP, IMAP, TELNET, entre outros. Ou seja, é um recurso fantástico!

Comando básicos

Segue alguns comandos que, apesar de básicos, são suficientemente bons para nos ajudar nas programações do dia a dia.

CURL_INIT( ) : A origem da utilização do cURL. Com esse comando iniciamos uma sessão. Essa função possui um retorno em que, a variável que recebe o retorno é a variável usada para identificar a sessão da requisição. Exemplo: $curl_teste = curl_init( ); atribuiu a sessão à $curl_teste.

CURLOPT_x : As opções são formas de configurar nossa requisição. São iniciadas com “CURLOPT_” seguidos de alguma coisa:

➡ URL : definimos a URL para estabelecer conexão.

➡ RETURNTRANSFER : definimos se queremos receber o retorno da requisição. Em caso afirmativo deve ser configurado como True, ou como 1. Ao contrário seria False, ou 0.

➡ POST : indicamos se estamos enviando dados por POST. Defina 1, se sim.

➡ POSTFIELDS : informamos em um array nossos dados que estamos enviando por POST.

➡ CUSTOMREQUEST : definimos o método HTTP que queremos usar na requisição (GET, POST, PUT, DELETE).

Todas essas opções de CURLOPT_AlgumaCoisa, deve ser passadas dentro de uma função chamada CURL_SETOPT_ARRAY( ), que é responsável por atribuir nossas configurações. Seria algo do tipo:

curl_setopt_array($curl_teste, [ CURLOPT_RETURNTRANSFER => 1])

Após iniciar a sessão e fazer as devidas configurações, precisamos saber dos comandos:

CURL_EXEC( ) : É o que vai executar a nossa requisição. Ele recebe como parâmetro a nossa variável que recebeu o retorno de curl_init. E também, se ele for atribuído à uma variável, esta poderá receber o retorno da requisição. Dependerá também de como configuramos, certo?

CURL_CLOSE( ) : Outro comando dos básicos, mas essenciais é a função que encerra a sessão da requisição. Faz sentido usar ele, não!? Ele deve receber por parâmetro a variável que recebeu o curl_init.

Mesmo não vendo tudo… Percebemos que o cURL basicamente: inicia, configura, executa e encerra. Nunca se esqueça disso :)

Solução de Problemas 💡

Agora que entendemos melhor, vamos pensar em um problema corriqueiro para os desenvolvedores.

Por vezes, precisamos entregar na nossa aplicação dados que estão em outros servidores. Se forem dados estáticos, isto é, dados que serão sempre os mesmos, pode considerar armazenar todos eles em um BD, ou em alguma parte do código dentro de uma estrutura de dados. Okay! É uma opção.

Obs.: se fosse dados que mudassem a cada passo de tempo, esquece manter eles armazenados.

Mas, pense que num formulário de cadastro o usuário precisa informar o estado e a cidade. Bom, existem 5.570 municípios no Brasil. Se deixar para o usuário digitar, ele pode digitar como quiser. Se for criar um “select” no HTML para não haver erros, de onde vai tirar o nome dos municípios? E se for registrar os nomes em algum lugar para buscar depois, vai gravar todos o nome de todas as cidades?

+1 obs.: não vale pedir o CEP, mesmo sem precisar, só para pegar os dados que deseja.

Esse “problema” poderia acontecer em muitos outros casos em que precisaria ter dados fiscais, bancários, transacionais, etc. Porém, vamos resolver esse que apresentei acima, em seguida vamos ter a noção de como resolver os outros. Okay?

Para fins de exemplo, abaixo está a codificação de uma página HTML que tem apenas 2 campos: select de estado e de cidade.

Vou explicar indo direto aos pontos… Na linha 21 eu crio o select de estados, esse elemento HTML possui um id (slcEstado) que será usado pelo JQuery em seguida.

Na linha 29 existe uma DIV (pai) que dentro dela será criado outra DIV (filho) com o select de cidades dentro. Isso será feito de acordo com o resultado das requisições.

Entre as linhas 44 e 60, o código identifica uma seleção no select de estado, pega o valor do estado selecionado, concatena o valor selecionado em um link. Se o valor for vazio, exclui a DIV (filho) do select de cidades, se possuir algum valor será feito a requisição Ajax pelo GET. Quando o Ajax entregar o retorno, o código destrói a DIV filho e insere o HTML dentro da DIV pai. Esse HTML inserido recria a DIV filho e possui o novo select de cidades.

Na linha 53 o Ajax faz a requisição no arquivo request.php passando o estado por parâmetro. Segue abaixo o código do arquivo request.php:

Começamos o arquivo criando duas variáveis: a $uf, que recebe por GET a sigla do estado selecionado, e o $endpoint que contém a URL para fazermos a requisição.

Na linha 6, iniciamos uma sessão com o cURL e vamos identificar essa sessão usando a variável $curl.

Logo em seguida (linha 8), atribuimos as configurações da nossa requisição. O primeiro parâmetro é o identificador da requisição, depois um array com as características. Nesse caso, estamos indicando que queremos receber o retorno, e estamos apontando em qual URL a chamada deve acontecer.

Obs.: Na linha 10 usei a função PHP str_replace( ) para substituir na URL a sigla “UF” para a sigla do estado. Se a URL já estivesse correta, poderia ser passado direto a variável $endpoint. 🆗❓

Na linha 14 é efetuado a requisição. A variável $resposta recebe o retorno dessa execução. Então, agora já podemos encerrar a sessão com a função curl_close( ).

Percebeu os 4 passos?! Iniciamos, configuramos, executamos e encerramos a REQUISIÇÃO. 🔁

Entre as linhas 18 e 28 apenas convertemos de string para JSon, pois a string já está no formato. E depois criamos dentro da variável $retorno a estrutura de DIV filho com o select de cidades (dentro de $rs->nome está o nome dos municípios do estado indicado na requisição).

Mesmo a variável $retorno sendo uma string, ela será interpretada pelo HTML como tags, por isso damos o comando echo da linha 30, pois ele é o que vai dar a saída (o retorno) para o Ajax.

Resultado ❓

Dados que não estão no seu domínio podem ser trazidos para a sua aplicação dessa forma. Simples, não?!

Vale lembrar que poderíamos fazer a requisição na URL direto em Ajax, mas como a ideia é o uso do cURL, em especial no PHP, está feito a nossa requisição usando o recurso, para casos em que a requisição deve ser obrigatoriamente em PHP.

O código também está hospedado, veja no repositório do GitHub.

Desejo sucesso, e muito cURL em seus códigos… 💻🚀 Até!!

--

--

Guilherme Donizetti
Guilherme Donizetti

Written by Guilherme Donizetti

Programador. Graduado em ADS. Pós em IA e M. Learning. AI-900 Certified. CyberOps Associate - CISCO. Bolsista PIBITI/CNPq-CPS. Membro DevProgram Mercado Pago.

No responses yet