使用 cURL 下载文件指南

🌌 365bet备用开户 ⏳ 2025-10-03 16:06:11 👤 admin 👁️ 2362 💖 637
使用 cURL 下载文件指南

在本指南中,您将学到:

基本的 cURL 下载文件语法

如何在使用 cURL 下载文件时处理较复杂的场景

如何批量下载多个文件

高效使用 cURL 的一些最佳做法

cURL 与 Wget 之间的快速对比

现在就来一探究竟吧!

基本的 cURL 下载文件语法

以下是使用 cURL 下载文件时会用到的最基本语法:

curl -O

注意:如果使用的是 Windows 系统,需要将 curl 替换为 curl.exe。之所以这么做,是因为在 Windows PowerShell 中,curl 实际上是 Invoke-WebRequest 的别名,而 curl.exe 才是真正用于运行 cURL 命令行的工具。

-O 标记用于指示 cURL 从 中指定的 URL 下载目标文件后,将其以原名保存到本地。您也可以使用 --remote-name 语法:

curl --remote-name

例如,请看下方的 cURL 下载文件命令:

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

如下所示,运行此命令后,会显示带下载进度条的输出:

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 35354 100 35354 0 0 155k 0 --:--:-- --:--:-- --:--:-- 158k

当进度达到 100% 时,名为 CSRiAeN.jpg 的文件将出现在您运行 cURL 命令的文件夹中:

如想进一步了解 cURL 及其可用选项,请参阅我们的 cURL 指南。现在来探索更复杂的场景!

使用 cURL 下载文件:高级选项

您已了解基本的 cURL 下载文件语法,现在可以学习使用其他选项自定义命令的操作了。

更改下载文件的名称

默认情况下,使用 -O 选项下载目标 URL 中指定的文件后,cURL 会将其以原名保存到本地。如果 URL 中指定的远程文件不含文件名,则 cURL 会创建名为 curl_response 且不带扩展名的文件:

cURL 还会打印一条警告来告知此行为:

Warning: No remote file name, uses "curl_response"

如要为下载的文件指定自定义名称,请使用 -o(或 --output)标记,具体如下所示:

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

该命令指示 cURL 对指定文件 URL 执行 GET 请求。然后,它将下载的内容以用户在 -o 后面指定的名称进行保存,而不是将其打印到标准输出。

这次输出文件将是名为 logo.jpg 的文件:

跟随重定向

一些 URL 并不直接指向所需文件,需要自动重定向才能到达最终目的地。

要指示 cURL 跟随重定向,您需要使用 -L 选项:

curl -O -L ""

如未使用 -L 标记,cURL 将输出重定向响应标头(例如 “301 Moved Permanently” 或 “302 Found”)。具体而言,它不会自动跟随 Location 标头中提供的新位置。

向服务器进行身份验证

某些服务器会限制对其资源的访问,要求用户进行身份验证。要执行基本的 HTTP 或 FTP 身份验证,您可使用 -u(或 --user)选项。这让您能够按照以下格式指定用户名和密码:

:

用户名和密码之间用冒号 (:) 分隔,因此,用户名不能含有冒号。但密码可以包含冒号。

字符串为可选项。如果仅指定用户名,cURL 会提示您输入密码。

以下是使用 cURL 下载文件时,需要向服务器进行身份验证的语法:

curl -O -u :

例如,您可以使用下方命令从需要进行身份验证的 URL 中下载 .png 文件:

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

cURL 将使用 myUser 和 myPassword 作为凭据,向服务器进行身份验证。之后,它会下载 secret.txt 文件。

限制带宽

默认情况下,cURL 会使用全部可用带宽来下载文件,但有时这并非可取之策。要控制下载速度,您可使用 --limit-rate 选项,并在其后面设置最大下载速度:

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

输出结果如下所示:

% 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

请注意,下载速度(每秒 5198 字节,相当于每秒 5 KB)会与选项中指定的速度保持一致。即使计算机的正常下载速度高于 --limit-rate 设置的值,也是如此。

--limit-rate 有助控制带宽使用情况,从而防止网络过载、遵守带宽限制或模拟较慢的网络条件以进行测试。

通过代理服务器下载

当您使用 cURL 执行下载请求时,您的 IP 地址会暴露给目标服务器。对于想要隐匿身份或绕过速率限制等反机器人检测措施的用户来说,这是个安全隐患。

要隐藏 IP 并通过代理路由请求,您可在 cURL 命令中使用 -x(或 --proxy)选项:

curl -x -O

必须按照以下格式指定:

[protocol://]host[:port]

请注意,代理 URL 将随您使用的代理(HTTP、HTTPS 或 SOCKS 代理)而变化。如想了解更详细的说明,请参阅 “cURL 代理集成指南”。

例如,如果您使用 HTTP 代理,则命令将变为:

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

在后台执行下载任务

默认情况下,cURL 下载文件命令会显示进度条,或在下载失败时显示错误信息。如想禁用这些输出,您可使用 -s(或 --silent)选项启用“无声”或“静默”模式:

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

这将使 cURL 静默运行。如果下载成功,文件会显示在当前目录中,但不会在终端显示任何反馈。

打印详细信息

如果下载过程中出现错误或您想要更好地了解 cURL 的后台执行情况,则建议使用 -v(或 --verbose)选项启用“详细”模式:

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

执行该命令后,您将看到额外的输出结果,提供有关请求和响应进程的详细信息:

* 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

其中包括连接详情、请求标头、响应标头以及额外的下载进度信息。

设置简洁进度条

标准的 cURL 下载文件进度条可能不符您的需求。您可使用 -#(或 --progress-bar)选项启用更简洁的进度条:

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

这将显示采用字符 # 表示的进度条,它将随文件下载进度的推进而被逐步填充:

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

与默认输出的 cURL 进度条相比,# 进度条提供更简洁的下载进度视图。

如何使用 cURL 下载多个文件

您刚才学习了使用 cURL 下载单个文件的方法,那如何通过一个命令下载多个文件呢?赶快做好准备,开始探索这一操作吧!

文件分片下载

cURL 支持使用 URL 扩展一次下载多个文件。具体而言,您可使用大括号 {} 指定具有相同远程 URL 的多个文件,从而批量下载它们:

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

这将下载三个指定文件:

1.jpg

2.jpg

3.jpg

请注意,{} 中指定的文件可以有不同的扩展名。

您也可以使用方括号 [] 语法来批量下载文件:

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

这将达到与第一个示例相同的结果。但使用此语法时,[] 中的所有文件都必须具有相同的扩展名。

注意:如果包含自定义选项(例如使用 -s 选项开启静默模式或 --limit-rate 选项限制带宽),则这些选项将应用于所有正在下载的文件。

多文件下载

要从不同的 URL 下载文件,需要多次指定 -O 选项:

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

运行此命令后,cURL 将从 i.imgur.com 下载 CSRiAeN.jpg,并从 brightdata.com 下载 upload_blog_20201220_153903.jpg。

输出结果将包含每个给定 URL 的下载进度条:

% 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

您也可以使用多个 -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"

运行上述命令后,cURL 将下载 CSRiAeN.jpg 并将其另存为 logo.jpg,以及下载 upload_blog_20201220_153903.svg 并将其另存为 blog_post.svg。

注意,您还可以将 -O 选项和 -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"

运行上图命令后,cURL 将如之前一样,采用同一方式下载 logo.jpg ,但下载 upload_blog_20201220_153903.svg 后会将其以原名进行保存。

请注意,其他选项(如 -v、-s 或 --limit-rate)均适用于所有 URL,因此必须指定一次。

使用 cURL 下载文件的最佳做法

以下列举了使用 cURL 下载文件时的一些最佳做法:

在 Windows 上使用 curl.exe 下载,而非 curl:在 Windows 系统中,使用 curl.exe 下载文件,而非 curl,以免与 Invoke-WebRequest cmdlet 产生冲突。

忽略 HTTPS 和 SSL/TLS 错误(谨慎使用):使用 -k(或 --insecure)选项忽略 SSL/TLS 证书验证错误。但请注意,这会降低安全性,只能在受信任环境中使用。

指定正确的 HTTP 方法:发起请求时,使用适当的 HTTP 方法,例如 GET、POST 或 PUT。所使用的方法会影响服务器响应请求的方式。请使用 -X 选项指定方法。

将 URL 括在引号中并转义特殊字符:始终使用单引号或双引号将 URL 括在其中,以便 cURL 能正确处理特殊字符。使用转义字符 () 来避免 URL 中出现空格、与号 “&” 和其他特殊字符。

指定代理来保护身份:使用 -x(或 --proxy)选项来通过代理路由 cURL 请求。这有助保护您的 IP 地址并在抓取或下载文件时隐匿身份。

在不同请求中保存和复用 cookie:使用 -c 和 -b 选项可在后续请求中保存和复用 cookie。这有助维持会话的持久性、保持身份验证状态或进行状态追踪。

限制下载速度以增强控制:使用 --limit-rate 选项来控制下载速度,并避免网络连接过载或触发服务器的速率限制机制。

添加详细输出结果以便调试:使用 -v 选项启用详细模式,获取有关请求和响应的详细信息。这有助进行调试和故障排除。

检查错误响应:始终使用 -w 选项检查 HTTP 响应代码,以验证文件下载是否成功(例如 “200 OK” 状态码提示)或是否出现错误(例如 “404 Not Found” 错误提示)。

文件下载工具 cURL 与 Wget 的区别

cURL 和 Wget 都是用于从远程服务器获取文件的命令行工具。两者的区别主要体现在以下方面:

Wget 是专为从网络下载文件而打造的工具。它支持 HTTP、HTTPS、FTP 和其他各项协议。Wget 因可以递归下载文件、恢复中断的下载并能在后台可靠运行而闻名。详情请参阅“如何在 Python 中使用 Wget 下载网页”。

cURL 是一种多功能命令行工具,旨在与使用各种互联网协议的服务器进行通信,传输数据。它常用于测试端点、执行简单的 HTTP 请求和下载单个文件。cURL 还可用于网页抓取。

cURL 和 Wget 之间的主要区别在于 cURL 在数据传输方面提供更精细化的控制。具体而言,它支持自定义标头、身份验证和更多的协议。相比之下,Wget 更简单,更适合批量下载、递归下载和处理中断的传输。

结语

在本指南中,您学习了使用 cURL 下载文件的各种操作。您先了解了基本的 cURL 下载文件语法,然后对更复杂的场景和用例进行了探索。现在您已知道如何使用 cURL 抓取单个或多个文件。

请记住,任何时候,只要您发起 HTTP 请求,就会在互联网上留下踪迹。为保护您的身份和隐私并提高安全性,您应将代理与 cURL 集成。值得庆幸的是,Bright Data 可为您解决这一问题!

Bright Data 掌控着全球最好的代理服务器,为财富 500 强企业和 20,000 多家客户提供服务。其全球代理网络包括:

数据中心代理 – 超过 77 万个数据中心 IP。

住宅代理 – 超过 7200 万个住宅 IP,遍布 195 个以上国家/地区。

ISP 代理 – 超过 70 万个 ISP IP。

移动代理 – 超过 700 万个移动 IP。

总体而言,Bright Data 拥有市面上规模最大且最可靠的抓取型代理网络。

立即注册并免费测试我们的代理和抓取解决方案!

免费试用

用Gmail账号注册

支持支付宝等多种支付方式

相关文章