Utilizando cURL com PHP

Em nosso artigo anterior mostramos como utilizar a biblioteca cURL de maneira geral, rodando em linha de comando no linux. Neste artigo iremos mostrar como usar o cURL em conjunto com o PHP.

Diversas vezes precisamos realizar requisições ou transferir data em nosso código backend. Uma das maneiras mais completas de se fazer isso é utilizando o cURL. Além de requisições simples como GET e POST com ele podemos utilizar vários protocolos como IMAP, POP, FTP e outros.

Básico

Para começar nós devemos chamar a função curl_init() que retorna um recurso cURL. Esta função aceita um único parâmetro que é a URL para qual a requisição vai ser enviada. Esta URL pode ser informada depois em uma configuração.

$curl = curl_init();

Configurações

Assim que iniciarmos o nosso recurso cURL podemos começar a passar parâmetros para ele, assim configurando nossa requisição. Abaixo listamos alguns parâmetros básicos:

  • CURLOPT_RETURNTRANSFER - Retorna a resposta como uma string ao invés de printar na tela
  • CURLOPT_CONNECTTIMEOUT - Segundos tentando conectar até o timeout
  • CURLOPT_TIMEOUT - Segundos limite para execução do cURL
  • CURLOPT_USERAGENT - String contendo um user-agent para a requisição
  • CURLOPT_URL - URL para enviar a requisição
  • CURLOPT_PORT - Para informar uma porta
  • CURLOPT_HTTPHEADER - Cabeçalhos da requisição
  • CURLOPT_POST - Envia a requisição como POST
  • CURLOPT_POSTFIELDS - Array de informações enviadas como POST

Nós podemos informar um parâmetro usando a função curl_setopt(), assim como no exemplo abaixo:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://exemplo.com.br');

É possível informar diversos parâmetros ao mesmo tempo usando a função curl_setopt_array() e passando um array de opções:

$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://exemplo.com.br'
]);

Enviando a requisição

Assim que todas as opções estiverem configuradas e sua requisição pronta para ser enviada você deve usar a função curl_exec() para executar. Os retornos podem ser os seguintes:

  • false - Se houve algum erro ao executar a requisição
  • true - Se a requisição foi realizada e a opção CURLOPT_RETURNTRANSFER estiver setada para false
  • A resposta - Se a opção acima estiver setada como true o retorno será a resposta da requisição realizada

Utilizando o exemplo anterior nós podemos pegar o resultado da seguinte maneira:

$result = curl_exec($curl);

Com o resultado sendo o retorno da requisição, que pode ser um JSON, uma string ou mesmo HTML

Fechando a requisição

Após realizar a requisição e utilizar os dados retornados é interessante você fechar o cURL para limpar alguns recursos do sistema (como memória RAM), para isto basta usar a função curl_close()

Exemplo - Requisição GET com cURL e PHP

// Cria o cURL
$curl = curl_init();
// Seta algumas opções
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://exemplo.com.br/?item1=valor&item2=valor'
]);
// Envia a requisição e salva a resposta
$response = curl_exec($curl);
// Fecha a requisição e limpa a memória
curl_close($curl);

Exemplo - Requisição POST com cURL e PHP

// Cria o cURL
$curl = curl_init();
// Seta algumas opções
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://exemplo.com.br',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => [
        item1 => 'valor',
        item2 => 'valor'
    ]
]);
// Envia a requisição e salva a resposta
$response = curl_exec($curl);
// Fecha a requisição e limpa a memória
curl_close($curl);

Erros

É importante sempre tratar possíveis erros que aconteçam na requisição. Para isso existem duas funções do cURL:

  • curl_error() - Retorna uma string com uma mensagem de erro, se a string estiver em branco, nenhum erro aconteceu
  • curl_errno() - Retorna um código de erro

--

Artigo baseado em http://codular.com/curl-with-php