Como baixar arquivos com o cURL

Aprenda a baixar arquivos com eficiência com o cURL — desde sintaxe básica até opções avançadas, além de uma rápida comparação entre o cURL e o Wget.
14 min read
How to download files with curl blog image

Neste tutorial, você verá:

  • A sintaxe básica para download de arquivos com o cURL
  • Como lidar com cenários mais complexos ao baixar arquivos com o cURL
  • Como baixar vários arquivos de uma vez
  • Algumas boas práticas para usar cURL de forma eficaz
  • Uma comparação rápida entre o cURL e o Wget

Vamos lá!

Sintaxe básica para download de arquivos com o cURL

Esta é a sintaxe mais básica para download de arquivos com o cURL:

curl -O <file_url>

Observação: no Windows, substitua curl por curl.exe. Isso é necessário porque curl é um pseudônimo para Invoke-WebRequest no Windows PowerShell, enquanto curl.exe executa explicitamente a ferramenta na linha de comando do cURL.

O parâmetro -O diz ao cURL para salvar o arquivo baixado com seu nome original na URL especificada em <file_url>. Da mesma forma, você pode usar --remote-name:

curl --remote-name <file_url>

Por exemplo, considere o seguinte comando do cURL para download de arquivos:

curl -O "https://i.imgur.com/CSRiAeN.jpg"

Isso produzirá um resultado com uma barra de progresso de download, conforme abaixo:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   155k      0 --:--:-- --:--:-- --:--:--  158k

Quando o progresso atingir 100%, um arquivo chamado CSRiAeN.jpg aparecerá na pasta em que você executou o comando cURL:

O arquivo CSRiAeN.jpg baixado na pasta em que o cURL foi executado

Para obter mais informações sobre o que é cURL e quais opções ele oferece, leia nosso guia sobre o cURL. É hora de explorar cenários mais complexos!

Usando o cURL para baixar um arquivo: opções avançadas

Agora que você conhece a sintaxe básica para download de arquivos do cURL, está pronto para aprender como personalizar o comando com opções adicionais.

Alterar nome do arquivo baixado

Por padrão, o parâmetro -O baixa o arquivo especificado na URL de destino usando seu nome original. Se o arquivo remoto especificado na URL não incluir um nome, o cURL cria um arquivo sem extensão chamado curl_response:

O arquivo padrão curl_response na pasta em que o cURL foi executado

O cURL também imprimirá um aviso para informá-lo sobre esse comportamento:

Warning: No remote file name, uses "curl_response"

Para especificar um nome personalizado para o arquivo baixado, use o parâmetro -o (ou --output) conforme mostrado aqui:

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg"

Esse comando instrui o cURL a realizar uma solicitação GET para o URL do arquivo especificado. Em seguida, ele salva o conteúdo baixado com o nome especificado após -o em vez de imprimi-lo em stdout.

Desta vez, o arquivo de saída será um arquivo logo.jpg :

O arquivo logo.jpg baixado na pasta em que o cURL foi executado

Siga os redirecionamentos

Alguns URLs não apontam diretamente para o arquivo desejado e exigem redirecionamentos automáticos para chegar ao destino final.

Para instruir o cURL a seguir os redirecionamentos, você precisa usar o parâmetro -L :

curl -O -L "<file_url>"

Sem o parâmetro -L , o cURL geraria os cabeçalhos de resposta de redirecionamento (como 301 Movido permanentemente ou 302 Encontrado). Especificamente, ele não seguiria automaticamente a nova localização fornecida no cabeçalho Localização .

Autenticação no servidor

Alguns servidores restringem o acesso a seus recursos e exigem autenticação do usuário. Para realizar a autenticação HTTP ou FTP básica, você pode usar o parâmetro -u (ou --user). Isso permite que você especifique um nome de usuário e senha no seguinte formato:

<username>:<password>

O nome de usuário e a senha são separados por dois pontos (:), o que torna impossível incluir dois pontos no nome de usuário. Em vez disso, a senha pode conter dois pontos.

A string <password> é opcional. Se você especificar apenas o nome de usuário, o cURL solicitará que você digite a senha.

Aqui está a sintaxe para baixar um arquivo com o cURL usando autenticação de servidor:

curl -O -u <username>:<password> <file_url>

Por exemplo, você pode baixar um arquivo .png de uma URL com autenticação usando este comando:

curl -O -u "myUser:myPassword" "https://example.com/secret.txt"

O cURL fará a autenticação no servidor usando myUser e myPassword como credenciais. Em seguida, ele fará o download do arquivo secret.txt .

Imposição de restrições de largura de banda

Por padrão, o cURL baixa um arquivo usando toda a largura de banda disponível, o que nem sempre é desejável. Para controlar a velocidade de download, você pode usar a opção --limit-rate seguida pela velocidade máxima de download que você deseja definir:

curl -O --limit-rate 5k "https://i.imgur.com/CSRiAeN.jpg"

A saída será algo como:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   5166      0  0:00:06  0:00:06 --:--:--  5198

Observe que a velocidade de download (5198 bytes por segundo, o que corresponde a 5 KB por segundo) corresponde à especificada na opção. Isso ocorre mesmo quando a velocidade normal de download da sua máquina é maior do que o valor definido com --limit-rate.

--limit-rate é útil para controlar o uso da largura de banda para evitar sobrecarregar a rede, cumprir as restrições de largura de banda ou simular condições de rede mais lentas para fins de teste.

Faça o download por meio de um servidor proxy

Quando você executa uma solicitação de download usando cURL, seu endereço IP é exposto ao servidor de destino. Isso é um problema se você quiser manter a privacidade ou evitar medidas antibot, como limitação de velocidade.

Para mascarar seu IP e encaminhar sua solicitação por meio de um proxy, use a opção -x (ou --proxy) em seu comando do cURL:

curl -x <proxy_url> -O <file_url>

<proxy_url> deve ser especificado no seguinte formato:

[protocol://]host[:port]

Observe que o URL do proxy variará dependendo se você estiver usando um proxy HTTP, HTTPS ou SOCKS. Para obter instruções mais detalhadas, consulte nosso guia de integração de proxy cURL.

Por exemplo, se você estiver usando um proxy HTTP, o comando será:

curl -x "http://proxy.example.com:8080" -O "https://i.imgur.com/CSRiAeN.jpg"

Execução de downloads em segundo plano

Por padrão, o comando de download de arquivos do cURL exibe uma barra de progresso ou uma mensagem de erro em caso de falha. Para desativar essas respostas, você pode ativar o modo “silencioso” usando a opção -s (ou --silent):

curl -O -s "https://i.imgur.com/CSRiAeN.jpg"

Isso fará com que o cURL opere silenciosamente. Se o download for bem-sucedido, o arquivo aparecerá no diretório atual, mas não haverá feedback no terminal.

Impressão de informações muito detalhadas

Em caso de erro ou para entender melhor o que o cURL está fazendo nos bastidores, é recomendável ativar o modo detalhado usando a opção -v (ou --verbose):

curl -O -v "https://i.imgur.com/CSRiAeN.jpg"

Ao executar o comando, você verá uma saída adicional que fornece informações detalhadas sobre o processo de solicitação e resposta:

* IPv6: (none)
* IPv4: 146.75.52.193
*   Trying 146.75.52.193:443...
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* ALPN: server accepted http/1.1
* Connected to i.imgur.com (146.75.52.193) port 443
* using HTTP/1.x
> GET /CSRiAeN.jpg HTTP/1.1
> Host: i.imgur.com
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
* schannel: failed to decrypt data, need more data
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 35354
< Content-Type: image/jpeg
< Last-Modified: Wed, 08 Jan 2025 08:02:49 GMT
< ETag: "117b93e0521ba1313429bad28b3befc8"
< x-amz-server-side-encryption: AES256
< X-Amz-Cf-Pop: IAD89-P1
< X-Amz-Cf-Id: wTQ20stgw0Ffl1BRmhRhFqpCXY_2hnBLbPXn9D8LgPwdjL96xarRVQ==
< cache-control: public, max-age=31536000
< Accept-Ranges: bytes
< Age: 2903
< Date: Wed, 08 Jan 2025 08:51:12 GMT
< X-Served-By: cache-iad-kiad7000028-IAD, cache-lin1730072-LIN
< X-Cache: Miss from cloudfront, HIT, HIT
< X-Cache-Hits: 1, 0
< X-Timer: S1736326272.410959,VS0,VE1
< Strict-Transport-Security: max-age=300
< Access-Control-Allow-Methods: GET, OPTIONS
< Access-Control-Allow-Origin: *
< Server: cat factory 1.0
< X-Content-Type-Options: nosniff
<
{ [1371 bytes data]
100 35354  100 35354    0     0   212k      0 --:--:-- --:--:-- --:--:--  214k
* Connection #0 to host i.imgur.com left intact

Isso inclui detalhes da conexão, cabeçalhos de solicitação, cabeçalhos de resposta e informações adicionais sobre o andamento do download.

Definição de uma barra de progresso simplificada

A barra de progresso padrão para download de arquivos do cURL pode não atender às suas necessidades. Você pode ativar uma barra de progresso mais simples com a opção -# (ou --progress-bar):

curl -O -# "https://i.imgur.com/CSRiAeN.jpg"

Isso exibirá uma barra de progresso usando o caractere # , que será preenchida incrementalmente à medida que o arquivo for baixado:

########################################################### 100.0%

A barra # fornece uma visão mais minimalista do progresso do download em comparação com a resposta padrão do progresso do cURL.

Como baixar vários arquivos com o cURL

Você acabou de ver como baixar um arquivo com o cURL, mas que tal baixar vários arquivos com um único comando? Prepare-se para aprender isso!

Download de uma gama de arquivos

O cURL suporta o download de vários arquivos ao mesmo tempo usando a expansão de URL. Em detalhes, você pode baixar vários arquivos com a mesma URL remota especificando-os usando chaves {}:

curl -O "https://example.com/images/{1.jpg,2.jpg,3.jpg}"

Isso fará o download dos três arquivos especificados:

1.jpg
2.jpg
3.jpg

Observe como os arquivos especificados no {} podem ter extensões diferentes.

Equivalentemente, você pode usar a sintaxe dos colchetes [] :

curl -O "https://example.com/files/file[1-3].jpg"

Isso alcançará o mesmo resultado do primeiro exemplo. Nesse caso, todos os arquivos em [] devem compartilhar a mesma extensão.

Observação: se você incluir opções personalizadas (como -s para o modo silencioso ou --limit-rate para restrições de largura de banda), elas serão aplicadas a todos os arquivos que estão sendo baixados.

Download de vários arquivos

Para baixar arquivos de URLs diferentes, você precisa especificar a opção -O várias vezes:

curl -O "https://i.imgur.com/CSRiAeN.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"

Esse comando baixará CSRiAeN.jpg de i.imgur.com e upload_blog_20201220_153903.jpg de brightdata.com.

A resposta conterá uma barra de download por URL fornecida:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   271k      0 --:--:-- --:--:-- --:--:--  276k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 22467    0 22467    0     0  34657      0 --:--:-- --:--:-- --:--:-- 34724

Da mesma forma, você pode usar várias opções -o :

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg" -o "blog_post.svg"

O comando acima baixará o arquivo CSRiAeN.jpg , o salvará como logo.jpg e baixará o arquivo upload_blog_20201220_153903.svg e o salvará como blog_post.svg.

Lembre-se de que você também pode misturar as opções -O e -o :

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"

Isso baixa o arquivo logo.jpg como antes e upload_blog_20201220_153903.svg com seu nome de arquivo original.

Observe que outras opções como -v-s ou --limit-rate se aplicam a todos os URLs de forma distinta, então elas devem ser especificadas uma vez.

Boas práticas ao baixar arquivos com o cURL

Abaixo está uma lista de algumas das melhores práticas de download de arquivos com o cURL mais importantes:

  • Use curl.exe em vez de curl no Windows: no Windows, use curl.exe em vez de curl para evitar o conflito com o Invoke-WebRequest cmdlet.
  • Ignore os erros de HTTPS e SSL/TLS (com cuidado): use a opção -k (ou --insecure) para ignorar os erros de validação do certificado SSL/TLS. Ao mesmo tempo, esteja ciente de que isso compromete a segurança e só deve ser usado em ambientes confiáveis.
  • Especifique os métodos HTTP corretos: ao fazer solicitações, use o método HTTP apropriado, como GET, POST ou PUT. O método afeta a forma como o servidor responde à sua solicitação. Use a opção -X para especificar o método.
  • Coloque URLs entre aspas e caracteres especiais de escape: sempre envolva URLs em aspas simples ou duplas para lidar corretamente com caracteres especiais. Use caracteres de escape (\) para evitar problemas com espaços, ampersands (“e” comercial) e outros caracteres especiais em URLs.
  • Especifique um proxy para proteger sua identidade: use a opção -x (ou --proxy) para rotear suas solicitações do cURL por meio de um proxy. Isso ajuda a proteger seu endereço IP e a manter a privacidade ao copiar ou baixar arquivos.
  • Salve e reutilize cookies em diferentes solicitações: use as opções -c e -b para salvar e reutilizar cookies em solicitações subsequentes. Isso ajuda a manter a persistência da sessão e pode ser útil para autenticação ou rastreamento.
  • Limite a velocidade de download para um melhor controle: use a opção --limit-rate para controlar a velocidade de download e evitar sobrecarregar sua conexão de rede ou acionar limites de velocidade no servidor.
  • Adicionar resultado detalhado para depuração: ative o modo detalhado com a opção -v para obter informações detalhadas sobre a solicitação e a resposta. Isso pode ser útil para depuração e solução de problemas.
  • Verifique as respostas com erros: sempre verifique os códigos de resposta HTTP usando a opção -w para verificar se o download do arquivo foi bem-sucedido (por exemplo, 200 OK) ou se houve um erro (por exemplo, 404 Não encontrado).

cURL vs Wget para baixar arquivos

O cURL e o Wget são ferramentas de linha de comando para recuperar arquivos de servidores remotos. A principal diferença entre os dois é a seguinte:

  • O Wget foi projetado para baixar arquivos da Web. Ele suporta HTTP, HTTPS, FTP e muitos outros protocolos. O Wget é conhecido por sua capacidade de baixar arquivos recursivamente, retomar downloads interrompidos e funcionar bem em processos em segundo plano. Veja como usá-lo para baixar páginas da web com Python.
  • O cURL é uma ferramenta de linha de comando versátil usada para transferir dados como origem ou destino de um servidor usando vários protocolos da Internet. É comumente usado para testar endpoints, realizar solicitações HTTP simples e baixar arquivos individuais. O cURL também pode ser usado para raspagem de dados na web.

A principal diferença entre o cURL e o Wget é que cURL fornece um controle mais granular sobre a transferência de dados. Em detalhes, ele suporta cabeçalhos personalizados, autenticação e mais protocolos. Em contraste, o Wget é mais simples e mais adequado para downloads em massa, recursão e tratamento de transferências interrompidas.

Conclusão

Neste guia, você aprendeu como baixar arquivos com o cURL. Você começou com a sintaxe básica do arquivo de download do cURL e explorou cenários e tipos de uso mais complexos. Agora você sabe como fazer raspagem de dados em um ou vários arquivos usando o cURL.

Lembre-se de que sempre que você faz uma solicitação HTTP, você deixa rastros na Internet. Para proteger sua identidade, privacidade e aprimorar sua segurança, considere integrar um proxy com o cURL. Felizmente, a Bright Data cuida disso para você!

A Bright Data controla os melhores servidores de proxies do mundo, atendendo a empresas listadas na Fortune 500 e a mais de 20.000 clientes. Sua rede mundial de proxies envolve:

De modo geral, essa é uma das maiores e mais confiáveis redes de proxies voltadas para extração de dados do mercado.

Inscreva-se agora e teste nossos proxies e soluções de raspagem de dados gratuitamente!

Não é necessário cartão de crédito