LOGIN:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

Quarta-feira, 31/05/2006 - 11:10 - Por Renato Bonicio
Seções relacionadas:

Usando a biblioteca CURL do PHP

Neste artigo você irá aprender o que é a Biblioteca CURL, como usá-la, e algumas de suas opções.

Introdução

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' => 'Renato', 'surname' => 'Bonicio');
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 simplismente 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.

Todos os artigos de Renato Bonicio

3 comentários publicados

  • 1. Legal, mas...

    Quarta-feira, 31/05/2006, por Daniel Lima dos Anjos Pinheiro

    Acho que tem que explicar a matéria com uns exemplos do nosso dia-a-dia!... mas fora isso... o cara manda bem!

    Responder comentário
  • 2. Tem que habilitar a biblioteca??

    Quinta-feira, 01/06/2006, por Estevão Lucas Lucas

    nãum estou conseguindo ultizar essa a biblioteca, tem que habilitar algo?? eu jah descomentei a extension=php_curl.dll
    e naum deu nada!
    o q q eu faço??

    Responder comentário
  • 3. Habilitar Curl

    Quarta-feira, 28/06/2006, por SILVIO SANTOS

    Tem que habilitar o módulo Curl em C:\Arquivos de programas\EasyPHP\phpini.exe (No meu caso que uso EasyPHP)

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Renato Bonicio é estudante do Curso Ciência da Computação no Centro Universitário da FEI. Trabalha com PHP desde 2001. Designer e Programador do site do Instituto de Economia Agrícola do Estado de SP (www.iea.sp.gov.br). Atualmente trabalha como desenvolvedor PHP na Ericsson Brazil.


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.