Logotipo Dicas-L, por Ricardo Burile

Busca

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

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

 

Zura! - Busque. Compare. Compre.

Outras ofertas

Notebook

Monitor

Impressora

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 (756 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
Engenharia de Software na Prática


Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

Grupo MBS