Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Mão na Massa - Programação Shell

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

cURL. Um cliente para múltiplos protocolos

Colaboração: Romeu Henrique Capparelli Fonseca

Data de Publicação: 15 de Junho de 2006

Com o avanço das tecnologias para internet, muitos protocolos vêm se firmando como meios de comunicação eficientes ou, até mesmo, "padrões de mercado". Alguns desses protocolos são clássicos como, por exemplo, HTTP e FTP. Apesar da aparente simplicidade e da documentação abundante, desenvolver aplicações com eles requer bastante cuidado.

Seguindo o princípio UNIX de desenvolvimento (seja pequeno, faça apenas uma coisa, e a faça bem feito) aliado ao poder dos pipes do bash (veja: http://www.dicas-l.com.br/dicas-l/20000906.php), podemos facilitar o trabalho utilizando ferramentas de terceiros.

1. Introdução

No caso de clientes para protocolos FTP, FTPS, TFTP, HTTP, HTTPS, TELNET, DICT, FILE e LDAP existe o cURL. O cURL é uma ferramenta de linha de comando para transferir dados com sintaxe URL. Além de suportar esses protocolos, consegue também tratar certificados digitais, cookies, proxies e autenticação (incluindo NTLM, Basic, Digest, Negotiate, Kerberos...)

Outras possibilidades de uso podem ser: segmentar downloads de arquivo, continuar um download interrompido, tunelamento e muito mais. Vamos explorar algumas possibilidades mais adiante.

2. Exemplos

2.1. Download simples de arquivo

Suponha que desejamos baixar uma versão do kernel, podemos usar o wget:

  $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz

Ou o curl:

  $ curl http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz 
  -o linux-2.6.16.tar.gz ```

2.2. Download simples de arquivo via proxy

Se eu preciso passar por um proxy:

  $ curl -x $PROXY_IP:$PROXY_PORTA \
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz \
  -o linux-2.6.16.tar.gz

2.3. Segmentando downloads

Existem algumas configurações de proxy/gateway que limitam a velocidade de download por conexão, assim, se tiveres mais de uma conexão a velocidade média de download pode aumentar bastante. Vamos primeiro descobrir o tamanho do arquivo usando a opção -I (header only):

  $ curl -I http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz |\
  grep Content-Length
  Content-Length: 51128010

Então, vamos dividir o trabalho em 5 partes de ~10 MB.

  $ curl --range 0-10485760 
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz 
  -o linux-2.6.16.tar.gz.part1 &
  
  $ curl --range 10485761-20971520 
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz 
  -o linux-2.6.16.tar.gz.part2 &
  
  $ curl --range 20971521-31457280 
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz 
  -o linux-2.6.16.tar.gz.part3 &
  
  $ curl --range 31457281-41943040 
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz 
  -o linux-2.6.16.tar.gz.part4 &
  
  $ curl --range 41943041-52428800 
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.gz 
  -o linux-2.6.16.tar.gz.part5 &

É claro que pode ser feito um algoritmo que calcule o tamanho adequado das partes. Ao final do download, quando todos os comandos retornarem, pode-se unir as partes e testar o arquivo:

  $ cat linux-2.6.16.tar.gz.part* > linux-2.6.16.tar.gz
  $ tar -tzf linux-2.6.16.tar.gz \
  && echo Arquivo OK || echo Arquivo com defeito

2.4. Upload de arquivo e formulários em HTTP

Suponha que eu queira realizar em lote o envio de alguns arquivos a algum site. Dependendo da quantidade, pode ser algo moroso. O cURL pode auxiliar esse tipo de tarefa. No exemplo aqui usado o site http://www.toolpanel.org/imagestuff/asciigenerator/ possui um formulário para conversão de imagens em ascii-art. Suponha que eu queira converter algumas dezenas de imagens... seria muito mais fácil em lote e em linha de comando.

O formulário dessa página é composto de alguns controles (checkboxes, inputs, file). No Firefox/Mozilla/Netscape podemos usar a ferramenta "Propriedades da página" para listar todos os controles e o ACTION, que é o destino dos dados entrados no formulário. Estudando a estrutura do formulário e testando com algumas de minhas imagens noto que o comando a seguir é suficiente:

  $ curl http://www.toolpanel.org/imagestuff/asciigenerator/asciiartist/generate.php \
  -F file=@logo.gif  \
  -F resolution=1 -F mode=3 -F fixed_char=W -F font-size=3 \
  -F line-height=2 -F letter-spacing=0 -o saida.html

O parâmetro -F <input name>=<input value> envia os dados como se fosse um dos controles do formulário. Para o caso de arquivos usa-se -F <input name>=@<caminho do arquivo>.

E voi-la. O html contém a conversão da minha figura em ascii-art (e algum banner).

3. Conclusão

O que foi mostrado aqui é bem superficial e tem o intuito de despertar o interesse sobre a ferrramenta mais do que servir como manual. Foi explorado apenas algumas poucas características de um dos tantos protocolos suportados. O cURl é um cliente simples e que associado a conjuntos de ferramentas de console pode substituir grandes sistemas.

4. Saiba Mais

Veja a relação completa dos artigos de Romeu Henrique Capparelli Fonseca

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.98/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (639 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

English for Reading and Listening
Enriqueça o seu vocabulário recebendo diariamente mensagens divertidas em inglês, com áudio em MP3.
Saiba mais

Biblioteca

Desenvolvendo Websites com PHP
Por Juliano Niederauer

O Monge e o Executivo: uma História sobre a Essência da Liderança
Por James C. Hunter

Extreme Programming
Por Vinicius Manhaes Teles

UML: Guia do Usuário
Por Grady Booch, James Rumbaugh e Ivar Jacobson

O Vendedor de Sonhos
Por Augusto Cury

Segurança de Redes em Ambientes Cooperativos
Por Emilio Tissato Nakamura e Paulo Licio de Geus

O Conhecimento em Rede
Por Carlos Nepomuceno e Marcos Cavalcanti

Utilizando UML e Padrões
Por CRAIG LARMAN

Sistema de Banco de Dados
Por Abraham Silberschatz

Hardware PC: Guia de Aprendizagem Rápida
Por Carlos E. Morimoto

Manual Completo do Linux: Guia do Administrador
Por Evi Nemeth, Trent R. Hein, Garth Snyder

Redes de Computadores e a Internet
Por James F. Kurose e Keith W. Ross

O Segredo
Por Rhonda Byrne

Os Segredos da Mente Milionária
Por T. Harv Eker

Construindo Sites com CSS e (X)HTML
Por Mauricio Samy Silva

Use a Cabeça!: JSP & Servlets
Por Brian Bashan, Kathy Sierra, Bert Bates

Expressões Regulares: Uma Abordagem Divertida
Por Aurélio Marinho Jargas

Qualidade de Software
Por Andre Koscianski Michel dos Santos Soares

Descobrindo o Linux: Entenda o Sistema Operacional GNU/Linux
Por Joao Eriberto Mota Filho

Enterprise Javabeans 3.0
Por Bill Burke, Richard Monson