Logotipo Dicas-L, por Ricardo Burile

Busca

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

Mão na Massa LDAP - 1 Profissional por Máquina
Configure um serviço de Diretórios baseado no servidor OpenLDAP!
Dia 6 de Dezembro - São Paulo
Saiba mais


 

Aprenda inglês em casa

Baixe gratuitamente as duas primeiras aulas

English for Reading and Listening

Receba por email, diariamente, mensagens contendo materiais para leitura e audição, incluindo arquivos no formato MP3 gravados por falantes nativos.

Saiba mais e faça sua inscrição

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

 

Mão na Massa Nagios

Assine a Lista Dicas-L

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

Publicar em del.icio.us

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

Referências Adicionais

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

Avalie esta dica

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

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

Recomende este site
Recomendar este artigo


Versão para impressão


Opinião dos Leitores

*Nome:
Email:
Me notifique sobre novos comentários nessa pagina
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Mão na Massa LDAP - 1 Profissional por Máquina
Configure um serviço de Diretórios baseado no servidor OpenLDAP!
Dia 6 de Dezembro - São Paulo
Saiba mais

Biblioteca

Redes - Guia Prático
Por Carlos. E. Morimoto

Hardware - o Guia Definitivo
Por Carlos. E. Morimoto

Kurumin 7 - Guia Prático
Por Carlos. E. Morimoto

Linux: Ferramentas Técnicas, 2ed
Por Carlos. E. Morimoto

VPN: Virtual Private Network
Por Lino Sarlo da Silva

MySQL - Guia do Programador
Por André Milani

Sistemas de Banco de Dados
Por Ramez E. Elmasri e Shamkant Navathe

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

Extreme Programming
Por Vinicius Manhaes Teles

Google Hacking
Por JOHNNY LONG

Elite da Tropa
Por Luis Eduardo Soares, Andre Batista e Rodrigo Pimentel

Harry Potter e as Relíquias da Morte
Por J.K. Rowling

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

PHP para Quem Conhece PHP
Por Juliano Niederauer

O Conhecimento em Rede
Por Carlos Nepomuceno e Marcos Cavalcanti

Enterprise Javabeans 3.0
Por Bill Burke, Richard Monson

Redes de Computadores
Por Andrew S. Tanembaum

Marley e Eu: a Vida e o Amor ao Lado do Pior Cão do Mundo
Por John Grogan

Deus, um delírio
Por Richard Dawkins

Java: Como Programar
Por Harvey M. Deitel e Paul J. Deitel

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

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

1808
Por Laurentino Gomes

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