An Interest In:
Web News this Week
- April 19, 2024
- April 18, 2024
- April 17, 2024
- April 16, 2024
- April 15, 2024
- April 14, 2024
- April 13, 2024
curl, downloads, ouputs e muitos "o"s
Todo mundo usa curl para baixar arquivos, certo?
J aconteceu isso aqui com voc?
Essa a primeira diferena imediata entre o curl e o wget, e pode ser irritante se voc est muito acostumado com o outro.
Vamos "resolver o problema" progredindo os nveis da demanda.
Nvel 0: preguioso
A primeira maneira para baixar arquivos simplesmente no usar curl!
$ wget https://releases.hashicorp.com/terraform/1.2.7/terraform_1.2.7_linux_amd64.zip$ lsterraform_1.2.7_linux_amd64.zip
Mas a no aprendemos nada de novo! Prximo!
Nvel 1: Jnior
A soluo mais comum para este problema usar -o especificando o nome do arquivo:
$ curl -so terraform.zip \https://releases.hashicorp.com/terraform/1.2.7/terraform_1.2.7_linux_amd64.zip
Esse parmetro til quando voc acessa aquelas URLs todas truncadas que por acaso geram um binrio para baixar, como imagem ou arquivo compactado.
Mas no exemplo acima, do Terraform, eu no precisaria especificar o nome, basta "espelhar" o "nome remoto do arquivo":
- releases.hashicorp.com/terraform/1.2.7/terraform_1.2.7_linux_amd64.zip
E, claro, existe uma opo mais conveniente para isso.
Nvel 2: pleno
A opo -O extrai o "remote file name" da URL (i.e., sem o caminho completo). exatamente o que procuramos para este caso.
$ TD=https://releases.hashicorp.com/terraform/1.2.7$ curl -sO $TD/terraform_1.2.7_linux_amd64.zip
Muito bom, mas no precisamos parar por aqui, certo?
Ao fazer download de qualquer coisa - em especial, binrios que vamos executar nos nossos preciosos sistemas operacionais -, idealmente deveramos fazer vrias verificaes no download para garantir que ele , de fato, o que queremos.
A recomendao oficial aqui seria:
- Baixar o .zip com o Terraform;
- Baixar o arquivo de SHA256;
- Baixar o arquivo para verificar a assinatura do arquivo de checksum;
- Baixar a chave gpg da Hashicorp;
Putz, que trabalheira! Mas ossos do ofcio.
O acesso chave da Hashicorp voc pode viabilizar com o prprio GPG:
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 72D7468Fgpg: key 34365D9472D7468F: public key "HashiCorp Security (hashicorp.com/security) <[email protected]>" importedgpg: Total number processed: 1gpg: imported: 1$ gpg --fingerprint 72D7468Fpub rsa4096 2021-04-19 [SC] [expires: 2026-04-18] C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468Fuid [ unknown] HashiCorp Security (hashicorp.com/security) <[email protected]>
Informaes batem, aparentemente estamos ok aqui.
Agora s baixar os demais arquivos:
$ curl -sO $TD/terraform_1.2.7_linux_amd64.zip \ $TD/terraform_1.2.7_SHA256SUMS \ $TD/terraform_1.2.7_SHA256SUMS.sig
U, o que deu errado?
Bem simples... Voc no leu a documentao.
If not told otherwise, curl writes the received data to stdout. It can be instructed to instead save that data into a local file, using the --output or --remote-name options. If curl is given multiple URLs to transfer on the command line, it similarly needs multiple options for where to save them.
Mltiplas URLs so histrias diferentes, e voc precisa especificar um parmetro para cada uma delas. No exemplo em questo, precisamos de trs -Os!
$ curl -sOOO $TD/terraform_1.2.7_linux_amd64.zip \ $TD/terraform_1.2.7_SHA256SUMS \ $TD/terraform_1.2.7_SHA256SUMS.sig
Meio tosco n. Mas o jeito e temos que conviver.
Ou no?
Nvel 3: Snior
Se voc daqueles que no se satisfaz com a primeira soluo que encontra e no liga de perder algum tempo procurando por algo que talvez no exista, este no o caso: o curl tem algo para voc!
Voc pode habilitar o --remote-name-all para resolver este assunto de maneira definitiva:
$ curl -s --remote-name-all \ $TD/terraform_1.2.7_linux_amd64.zip \ $TD/terraform_1.2.7_SHA256SUMS \ $TD/terraform_1.2.7_SHA256SUMS.sig
O Daniel Stenberg conta a histria desta opo neste blog post bem interessante sobre o histrico de opes de sada do curl. E embora a opo esteja disponvel desde 2008, segundo ele mesmo, no post de 2020, ela persiste como uma das opes mais obscuras e menos usadas do curl:
Nvel 4: Especialista
Apenas a ttulo de completude, j que estamos falando sobre essas opes, vou deixar uma opo que no se encaixa no exemplo acima por utilidade.
Neste mesmo post, temos um pargrafo:
Esse parmetro til quando voc acessa aquelas URLs todas truncadas que por acaso geram um binrio para baixar, como imagem ou arquivo compactado.
Normalmente sites que fazem isso usam cabealhos especiais para indicar o nome do arquivo.
Se voc for na Wikipdia e tentar baixar um artigo, como, por exemplo, a seo sobre Terraforming, voc ser apresentado a um boto.
Esse boto a seguinte URL:
Se voc fizer uma "anlise exploratria" na URL, voc vai observar alguns cabealhos interessantes:
$ curl -sI https://en.wikipedia.org/api/rest_v1/page/pdf/Terraforming | fgrep -i content-dispositioncontent-disposition: attachment; filename="Terraforming.pdf"; filename*=UTF-8''Terraforming.pdf
O nome do arquivo indicado pelo cabealho de content-disposition.
Se voc usar o curl com o parmetro -J combinado com o -O, voc consegue baix-lo com o "nome certo":
$ curl -sOJ https://en.wikipedia.org/api/rest_v1/page/pdf/Terraforming
Bnus: verificao de download
Neste post, usei o download do Terraform como motivao para avaliar os parmetros do curl. Falei sobre download seguro e at baixei a chave GPG da Hashicorp, mas no conclui... Vou colocar de bnus aqui no fim!
Baixamos os arquivos:
$ curl -s --remote-name-all \ $TD/terraform_1.2.7_linux_amd64.zip \ $TD/terraform_1.2.7_SHA256SUMS \ $TD/terraform_1.2.7_SHA256SUMS.sig
Podemos baixar a chave de vrios jeitos, e este um deles:
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 72D7468Fgpg: key 34365D9472D7468F: public key "HashiCorp Security (hashicorp.com/security) <[email protected]>" importedgpg: Total number processed: 1gpg: imported: 1$ gpg --fingerprint 72D7468Fpub rsa4096 2021-04-19 [SC] [expires: 2026-04-18] C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468Fuid [ unknown] HashiCorp Security (hashicorp.com/security) <[email protected]>
Confirmo a identidade com o cdigo do site
$ gpg --lsign-key 'C874 011F 0AB4 0511 0D02 1055 3436 5D94 72D7 468F'
Confirmo as assinaturas do arquivo .sig do Terraform com:
$ gpg --verify terraform_1.2.7_SHA256SUMS.siggpg: assuming signed data in 'terraform_1.2.7_SHA256SUMS'gpg: Signature made Wed 10 Aug 2022 02:51:41 PM -03gpg: using RSA key 374EC75B485913604A831CC7C820C6D5CD27AB87gpg: checking the trustdbgpg: marginals needed: 3 completes needed: 1 trust model: pgpgpg: depth: 0 valid: 1 signed: 1 trust: 0-, 0q, 0n, 0m, 0f, 1ugpg: depth: 1 valid: 1 signed: 0 trust: 1-, 0q, 0n, 0m, 0f, 0ugpg: next trustdb check due at 2024-04-06gpg: Good signature from "HashiCorp Security (hashicorp.com/security) <[email protected]>" [full]
Arquivo de checksums est ok! E agora o download:
$ sha256sum --ignore-missing -c terraform_1.2.7_SHA256SUMSterraform_1.2.7_linux_amd64.zip: OK
Pronto, pode usar o Terraform em paz!
Original Link: https://dev.to/marcelo_devsres/curl-downloads-ouputs-e-muitos-os-4cdk
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To