Usando a biblioteca CURL do PHP

Cedo ou tarde, você passará por um certo problema em seu script: como obter conteúdo de outros sites. Há muitos métodos para isto, e o mais simples, provavelmente, é usar a função fopen() (quando habilitada), porém sem muitas opções de uso. É onde entra a Biblioteca Curl. Esta biblioteca permite o acesso a outras páginas e também disponibiliza diversas opções de uso.

Neste artigo, iremos saber como ela funciona e explorar algumas de suas opções, mas primeiro vamos começar com alguns comandos básicos da Curl.

Básico

O primeiro passo é criar um novo recurso do tipo Curl, chamando a função curl_init():

<?php
$ch = curl_init();
?>

Agora que criamos, é possível acessarmos uma URL. Temos que informar a URL desejada usando a função curl_setopt().

<?php
// informar URL e outras funções ao CURL
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
?>

Depois, para acessarmos a página, chamaremos a função curl_exec que irá executar os comandos e automaticamente imprimir a página.

<?php
// Acessar a URL e enviá-la ao browser
curl_exec($ch);
?>

Finalmente, encerraremos esse recurso Curl para liberarmos o sistema. Isto pode ser feito com a função curl_close():

<?php
// liberar o sistema
curl_close($ch);
?>

O único problema é que a saída da página é imediatamente impressa. Mas e se quisermos usar esta saída de uma outra forma? Não há problemas, pois existe uma opção chamada “CURLOPT_RETURNTRANSFER” que, quando definida como TRUE, é responsável por retornar a saída ao invés de imprimir. Veja o exemplo:

<?php 
$ch = curl_init();
// informar URL e outras funções ao CURL
curl_setopt($ch, CURLOPT_URL, "http://www.google.nl/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Acessar a URL e retornar a saída
$output = curl_exec($ch);
// liberar
curl_close($ch);
// Substituir ‘Google’ por ‘PHP Curl’
$output = str_replace(‘Google’, ‘PHP Curl’, $output);
// Imprimir a saída
echo $output;
?>

Nos dois exemplos anteriores, você pode notar que usamos a função curl_setopt() para definir como a página seria acessada. Definindo mais opções, nós podemos perceber a força do Curl e o tudo o que ele torna possível. Vamos testar um pouco mais:

Opções
Se você consultar o manual pela função curl_setopt(), você irá encontrar uma vasta lista de opções. Vamos testar as mais interessantes:

A primeira opção é a “CURLOPT_FOLLOWLOCATION”. Quando definida como TRUE, Curl automaticamente segue qualquer redirecionamento feito pela página. Por exemplo, se uma página PHP usa header(“Location: http://url”), curl vai automaticamente segui-la:

<?php 
$ch = curl_init();
// informar URL e outras funções ao CURL
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// Acessar a URL e imprimir a saída
curl_exec($ch);
?>

Se o Google decidir por redirecionar, o exemplo anterior irá seguir para o novo local. Outras duas opções relacionadas à esta ação são as opções “CURLOPT_MAXREDIRS” e “CURLOPT_AUTOREFERER”.

A opção “CURLOPT_MAXREDIRS”, permite a você escolher quantos redirecionamentos poderão ser seguidos. Se a opção “CURLOPT_AUTOREFERER” estiver definida como TRUE, Curl irá automaticamente incluir o cabeçalho Referer em cada redirecionamento.

A próxima é a opção “CURLOPT_POST”. Esta é uma opção muito útil, a partir da idéia de que ela possibilita a você fazer requisições via POST, ao invés de requisições GET, que atualmente significa que você pode submeter um form para outras páginas sem estar atualizado. O exemplo a seguir demonstra essa idéia:

<?php 
$ch = curl_init();
// informar URL e outras funções ao CURL
curl_setopt($ch, CURLOPT_URL, "http://projects/phpit/content/using%20curl%20php/demos/handle_form.php");
// Faz um POST
$data = array(‘name’ => ‘Jefferson’, ‘surname’ => ‘Soares’);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// Acessar a URL e imprimir a saída
curl_exec($ch);
?>

E o form.php:

<?php 
echo ‘<h3>Variáveis que eu recebi: </h3>’;
echo ‘<pre>’;
print_r ($_POST);
echo ‘</pre>’;
?>

Como você pode perceber, esta opção torna fácil o submit de forms e é uma ótima maneira de testarmos nossos forms sem a obrigação de preenchermos todas às vezes.

A opção “CURLOPT_CONNECTTIMEOUT”, é usada para definir quanto tempo a Curl deve esperar por uma tentativa de conexão. Esta é uma opção muito importante para evitar uma parada em seu script. Uma opção também relacionada a este assunto é a “CURLOPT_TIMEOUT”, que é usada para definir quantas requisições são permitidas.

A última opção é a “CURLOPT_USERAGENET”, que permite a você definir o usuário de uma requisição. Isto torna possível a criação de seu próprio “Buscador”:

<?php 
$ch = curl_init();
// informar URL e outras funções ao CURL
curl_setopt($ch, CURLOPT_URL, "http://www.useragent.org/");
curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1?);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// acessa a URL e imprime a saída
curl_exec($ch);
?>

Agora que temos uma noção de algumas opções bem interessantes, vamos conhecer a função curl_getinfo() e saber o que ela pode fazer por nós.

Obter informações de uma página
A função curtl_getinfo() é usada para obter todos os tipos de diferentes informações sobre uma página que foi acessada. Você também pode definir informações específicas que você deseja, definindo um segundo argumento ou simplesmente deixando este argumento de lado e recebendo uma array com todos os detalhes:

<?php 
$ch = curl_init();
// informar URL e outras funções ao CURL
curl_setopt($ch, CURLOPT_URL, "http://www.google.com");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILETIME, true);
// acessar a URL
$output = curl_exec($ch);
// Imprimir as informações
echo ‘<pre>’;
print_r (curl_getinfo($ch));
echo ‘</pre>’;
?>

Na prática…

A primeira funcionalidade útil que poderia ser criada com a Curl, é a de checar se uma página realmente existe. Para fazer isto, você deve acessar a página e checar o código de resposta (se código = 400, página não encontrada, ou seja, não existe):

<?php 
$ch = curl_init();
// informar URL e outras funções ao CURL 
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/does/not/exist");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// acessar URL
$output = curl_exec($ch);
// Pegar o código de resposta
$response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// Not found?
if ($response_code == ’404?) {
echo ‘Página não existente’;
} else {
echo $output;
}
?>

A Biblioteca Curl também torna possível a criação de seu próprio Buscador, similar ao Google ou qualquer outro buscador de sua preferência. Este artigo não é sobre a programação de um Buscador, mas poderíamos futuramente tratar deste assunto.

Conclusão
Neste artigo, foi mostrado como usar a Biblioteca Curl e ter uma noção de como usar suas funções e opções.

Para tarefas mais básicas, como simplesmente acessar uma página, você provavelmente não precisará da biblioteca Curl, pois o PHP possui suporte à páginas remotas. Mas se você deseja ter opções avançadas a este acesso, você provavelmente vai querer usar este biblioteca, agora que conhece seu poder.

Facebook Twitter Linkedin Digg Delicious Reddit Stumbleupon Tumblr Posterous