Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
August 22, 2022 03:26 pm GMT

curl, downloads, ouputs e muitos "o"s

Todo mundo usa curl para baixar arquivos, certo?

J aconteceu isso aqui com voc?

Comando curl executando download de um binrio

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

Comando curl com a opo - o minsculo

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

Comando curl com a opo - O maisculo

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;

Imagem do site da Hashicorp mostrando os itens descritos acima

Putz, que trabalheira! Mas ossos do ofcio.

O acesso chave da Hashicorp voc pode viabilizar com o prprio GPG:

ID da chave GPG da Hashicorp

$ 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

Curl tentando baixar mltiplos arquivs com um nico - O maisculo

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 - O O O

$ 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

curl remote name all

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:

Excerto do post do Daniel confirmando o pargrafo acima

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

curl - s O maisculo J maisculo

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

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To