|
cURL. Um cliente para múltiplos protocolos: msg#02627culture.publications.dicas
cURL. Um cliente para múltiplos protocolos ========================================== Colaboração: Romeu Henrique Capparelli Fonseca 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=@xxxxxxxx \ -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 ============= - Sítio oficial cURL (http://curl.haxx.se/) - PHP e cURL (http://us3.php.net/curl) - cURL no Wikipedia (http://en.wikipedia.org/wiki/CURL) |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Red Hat Knowledgebase Aberta: 02627, Rubens Queiroz de Almeida |
|---|---|
| Next by Date: | Ativando o wireless de notebooks Centrino no Linux: 02627, Rubens Queiroz de Almeida |
| Previous by Thread: | Red Hat Knowledgebase Abertai: 02627, Rubens Queiroz de Almeida |
| Next by Thread: | Ativando o wireless de notebooks Centrino no Linux: 02627, Rubens Queiroz de Almeida |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |