Tips: Zend_Http_Client
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.
Mais um vez quero parabenizar por mais um post de excelente qualidade!
Felipe Girotti
dezembro 3, 2011
[…] 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 […]
ZendFramework: Zend_Http_Client Falha ao utilizar o setCookie(); « MarkoMafs Analista Desenvolvedor
abril 20, 2012