Tips: Zend_Http_Client

Posted on dezembro 3, 2011. Filed under: PHP, Tips, Zend Framework |

O componente Zend_Http_Client distribuído junto com o Zend Framework é uma ótima opção para você que precisa desenvolver programas automatizados na web. Robôs que capturam informações de páginas na web, uma técnica conhecida como web scraping, é extremamente útil em diversas situações, substituindo um esforço que teria que ser feito manualmente.

Este componente funciona como um cliente do protocolo HTTP. Útil para manipular requisições (POST, GET, PUT, etc.), fazer upload e download de arquivos, autenticação em proxies e manipulação de cookies. É uma ótima alternativa em relação à extensão libcurl para PHP. Menos esforço e deixa o código mais limpo.

Abaixo vamos alguns exemplos úteis do Zend_Http_Client. Perceba que ele pode ser usado independente do framework MVC.

  • Neste exemplo, estamos fazendo uma requisição GET simples, obtendo o corpo da resposta e imprimindo na tela. Setando um timeout de 120 segundos e dizendo para não seguir redirecionamentos.
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// define algumas configuracoes:
// timeout de 120 segundos e nao seguir redirects
$client->setConfig(array('timeout' => 120, 'max_redirects' => 0));

// define a URL da requisicao
$client->setUri("http://www.google.com");

// realiza uma requisicao GET
$response = $client->request('GET');

// imprime a resposta da requisicao
echo $response->getBody();
  • No próximo exemplo temos um script que realiza um POST em uma página de login, autenticando no site e exibindo o conteúdo da resposta da página logada.
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// define algumas configuracoes:
// timeout de 120 segundos 
$client->setConfig(array('timeout' => 120));

// define a URL da requisicao
$client->setUri("http://localhost/examples/login.php");

// define os parametros de POST, usuario e senha
$client->setParameterPost(array(
        'usuario' => 'douglas',
        'senha' => 'pass123',
));

// realiza uma requisicao POST
$response = $client->request('POST');

// imprime o corpo da pagina apos login
echo $response->getBody();
  • Neste exemplo, primeiramente estamos fazendo login em um site, e sequencialmente navegando em páginas internas que são disponíveis somente para usuários logados. Para que seja possível isso no Zend_Http_Client você tem que informá-lo para manter a sessão ativa através do método setCookieJar.
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// define algumas configuracoes:
// timeout de 120 segundos 
$client->setConfig(array('timeout' => 120));

// define a URL da requisicao
$client->setUri("http://localhost/examples/login.php");

// seta para que o cliente HTTP mantenha a sessao ativa
$client->setCookieJar();

// define os parametros de POST
$client->setParameterPost(array(
        'usuario' => 'douglas',
        'senha' => 'pass123',
));

// realiza login
$client->request('POST');

// acessando paginas restritas
$client->setUri("http://localhost/examples/interno.php");
$response = $client->request('GET');
echo $response->getBody();

// acessando paginas restritas
$client->setUri("http://localhost/examples/interno1.php");
$response = $client->request('GET');
echo $response->getBody();
  • Próximo exemplo, estamos fazendo o download de um arquivo pdf e salvando em disco de forma simples.
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// define algumas configuracoes:
// timeout de 120 segundos
$client->setConfig(array('timeout' => 120));

// define a URL do arquivo para download
$client->setUri("http://localhost/examples/arquivo.pdf");

// realiza a requisicao
$response = $client->request('GET');

// salva o conteudo do arquivo no disco local
file_put_contents("arquivo.pdf", $response->getBody());
  • Próximo exemplo, estamos fazendo o download de um arquivo pdf através de stream. Ideal para arquivos muito grandes. Dessa forma, não precisamos armazenar todo o conteúdo do arquivo em memória.
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// define algumas configuracoes:
// timeout de 120 segundos 
$client->setConfig(array('timeout' => 120));

// define a URL do arquivo para download
$client->setUri("http://localhost/examples/arquivo.pdf");

// faz o download do arquivo via stream
$client->setStream("arquivo.pdf")->request('GET');
  • Próximo exemplo, realizamos o upload simples de um arquivo.
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// define algumas configuracoes:
// timeout de 120 segundos 
$client->setConfig(array('timeout' => 120));

// define a URL onde sera realizado o upload
$client->setUri("http://localhost/examples/upload.php");

// define o arquivo que sera enviado.
// O segundo parametro seria equivalente ao nome do campo input file
$client->setFileUpload("arquivo.pdf", "arquivo");

// efetiva o upload
$client->request('POST');
  • Próximo exemplo, utilizamos as requisições http através de um proxy.
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// configuracoes para utilizar proxy
$client->setConfig(array(
        'adapter' => 'Zend_Http_Client_Adapter_Proxy',
        'proxy_host' => '192.168.0.254',
        'proxy_port' => 8080,
        'proxy_user' => 'douglas',
        'proxy_pass' => 'senha123',
        'sslusecontext' => false,
));

// define a URL da requisicao
$client->setUri("http://www.google.com");

// realiza uma requisicao GET
$response = $client->request('GET');

// imprime a resposta da requisicao
echo $response->getBody();
  • Próximo exemplo, fazemos uma requisição utilizando autenticação HTTP (Basic).
<?php
require_once("Zend/Http/Client.php");

$client = new Zend_Http_Client();

// define algumas configuracoes:
// timeout de 120 segundos
$client->setConfig(array('timeout' => 120));

// usuario senha para autenticacao http
$client->setAuth('douglas', 'senha123');

// define a URL da requisicao
$client->setUri("http://localhost/admin");

// realiza uma requisicao GET
$response = $client->request('GET');

// imprime a resposta da requisicao
echo $response->getBody();

Procurei neste post fornecer diversos scripts que realizam tarefas diversas de forma simples. Scripts prontos para uso, para que você possa usar como base em seus programas. Espero que aproveitem.

Make a Comment

Deixe uma resposta para Felipe Girotti Cancelar resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

2 Respostas to “Tips: Zend_Http_Client”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

Mais um vez quero parabenizar por mais um post de excelente qualidade!

[…] quem nunca usou o Zend_Http_Client, segue o link: DPasqua Lembrado Que o Zend_Http_Client é uma solução alternativa ao CURL() e também uma solução mais […]


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: