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:
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 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
:
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, usecurl.exe
em vez decurl
para evitar o conflito com oInvoke-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:
- Proxies de data centers — mais de 770.000 IPs de data centers.
- Proxies residenciais — mais de 72 milhões de IPs residenciais em mais de 195 países.
- Proxies ISP — mais de 700.000 IPs de provedor de internet.
- Proxies móveis — mais de 7 milhões de IPs móveis.
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