Requisições com a biblioteca cURL no PHP
Tema de hoje é a poderosa biblioteca cURL no PHP, com ela podemos enviar requisições e capturar retornos com diversos protocolos na WEB.
É quase impossível encontrar um programador PHP que nunca teve que utilizar a biblioteca cURL para capturar conteúdo de um site, consumir Web Services ou comunicar com APIs espalhadas pela WEB.
Mesmo existindo diversas opções para essas necessidades no PHP a biblioteca cURL é de longe a escolha mais aconselhada, um dos principais motivos disso é o fato que muitas hospedagens desativam por motivos de segurança o uso da função file_get_contents() do PHP, impossibilitando requisições a conteúdos externos.
Introdução sobre a biblioteca cURL
Programadores PHP quando falam da biblioteca cURL geralmente a primeira coisa que vem a mente é requisições cURL no PHP, mas essa biblioteca desenvolvida por Daniel Stenberg inicialmente foi projetada para ser executada via linha de comando trocando arquivos entre diferentes terminais, atualmente são suportados diversos tipos de protocolos (http, https, ftp, gopher, telnet, dict, file, e outros).
Apesar de ter iniciado como utilitário de linha de comando atualmente possui ligações com mais de 30 linguagens de programação, para que essa integração ocorra é necessário instalar libcurl que possui as funcionalidades do cURL.
Instalando cURL no PHP para usuários Ubuntu
Para utilizarmos todos os recursos disponibilizados pela biblioteca cURL no PHP é necessário instalar algumas bibliotecas entre elas a libcurl, abra o terminal e execute o comando abaixo:
1 |
sudo apt-get install curl libcurl3 libcurl3-dev php5-curl |
Após a instalação reinicie o servidor Apache:
1 |
sudo service apache2 restart |
Para verificar se a instalação ocorreu com sucesso e se a extensão cURL está habilitada, basta criar um script PHP e colocar nele o comando “echo phpinfo();”, ao ser executado no browser poderemos confirmar se a biblioteca está ativa, a página exibida deve conter a sessão “curl” como na imagem abaixo:
Comandos Básicos cURL
Vou explicar brevemente alguns comandos básicos para enviar uma requisição simples, mas existem diversas funções dessa biblioteca e também constantes pré-definidas que podem ser usadas com a função curl_setop().
curl_init() -> Essa função inicializa uma session cURL, tem que ser executado antes de qualquer comando cURL.
curl_setop() -> Essa é a função mais importante da biblioteca cURL, com ela podemos setar vários parâmetros para a session aberta.
curl_exec() -> Executa a session cURL e captura o retorno, essa função deve ser executada após ser iniciada e configurada uma session.
curl_getinfo() -> Retorna informações sobre a requisição, podemos obter o valor numérico Status Code HTTP exemplo (200, 301, 500 e etc)
curl_close() -> Fecha a session cURL aberta e libera todos os recursos.
Como observamos acima, com a função curl_setop() podemos setar diversas configurações para session que foi iniciada, podemos usar essa função para alterar o tipo de requisição que por padrão é sempre do tipo GET mas podemos alterar com o comando abaixo:
1 |
curl_setopt($ch, CURLOPT_POST, 1); |
Enviando requisições GET
Nesse exemplo vou enviar uma requisição GET para página feed do meu blog que fornece um arquivo XML com os últimos 5 posts publicados, usando a biblioteca cURL no PHP. Como o objetivo desse post não é demonstrar leitura de arquivos XMLs com PHP, vou apenas transformar a string XML de retorno em objeto com a função simplexml_load_string() e percorrer com foreach() para exibir os posts que foram retornados no feed de retorno.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?php // URL para onde será enviada a requisição GET $url_feed = "http://www.devwilliam.com.br/feed"; // Inicia a sessão cURL $ch = curl_init(); // Informa a URL onde será enviada a requisição curl_setopt($ch, CURLOPT_URL, $url_feed); // Se true retorna o conteúdo em forma de string para uma variável curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Envia a requisição $result = curl_exec($ch); // Finaliza a sessão curl_close($ch); // Transforma a string XML em Objeto $xml = simplexml_load_string($result); // Percorre os posts do feed foreach($xml->channel->item as $post): echo $post->title . "<br>"; endforeach; ?> |
Resultado no Browser listando os últimos 5 posts que foram publicados no meu blog:
Enviando requisições POST
Para demonstrar requisições POST utilizando cURL criei um script PHP retorna_data.php que recebe dados em POST, se comparado ao script da requisição via GET há uma diferença porque nesse script existe a montagem e passagem do parâmetro para session cURL, nesse exemplo vou enviar um parâmetro “data” e será retornado a data do servidor no formato JSON.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php // URL para onde será enviada a requisição GET $url_data = "http://localhost/curl/retorna_data.php"; // Inicia a sessão cURL $ch = curl_init(); // Informa a URL onde será enviada a requisição curl_setopt( $ch, CURLOPT_URL, $url_data); // Seta a requisição como sendo do tipo POST curl_setopt ($ch, CURLOPT_POST, 1); // Monta os parâmetros da requisição $parametros = 'parametro=data'; // Seta os parâmetros para session cURL curl_setopt ($ch, CURLOPT_POSTFIELDS, $parametros); // Se true retorna o conteúdo em forma de string para uma variável curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Envia a requisição $result = curl_exec($ch); // Finaliza a sessão curl_close($ch); // Exibe o retorno da requisição var_dump($result); ?> |
retorna_data.php
1 2 3 4 5 6 7 8 9 10 11 |
<?php // Recebe o parâmetro vi POST $parametro = (isset($_POST['parametro'])) ? $_POST['parametro'] : ''; // Verifica se o parâmetro não está vazio e se o valor é igual a 'data' if(!empty($parametro) && $parametro == 'data'): $retorno = array('data' => date('d-m-Y')); echo json_encode($retorno); endif; ?> |
Resultado no Browser exibindo o retorno com a data do servidor em JSON:
Assista o vídeo com os exemplos
Bom pessoal, neste post demonstrei funcionalidades básicas da biblioteca cURL no PHP, mas o poder dessa biblioteca é muito extenso e não caberia em apenas um post. Podemos utilizar essa biblioteca para diversos tipos de requisições, com diferentes configurações e como sempre deixo um link para documentação oficial do PHP sobre cURL.
Se você gostou desse post compartilhe nas redes sociais, até a próxima …