De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
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.
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 ```
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
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
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).
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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários