如何用 cURL 下载文件 – wiki大全

如何使用 cURL 下载文件:全面指南

cURL (Client URL) 是一个强大的命令行工具和库,用于通过各种协议传输数据,支持 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、DICT、TELNET、LDAP、LDAPS、FILE、POP3、POP3S、IMAP、IMAPS、SMTP、SMTPS、RTSP、RTMP、RTMPT、RTSP、GOPHER 和 SMB/CIFS。在日常开发和系统管理中,它最常用于发送 HTTP 请求和下载文件。

本文将详细介绍如何使用 cURL 下载文件,包括基本用法、高级选项和常见场景。

1. cURL 的基本下载

最简单的文件下载方式是直接指定文件的 URL。cURL 会将文件内容输出到标准输出 (stdout)。

示例:
bash
curl http://example.com/path/to/your/file.zip

问题: 这种方式会将文件内容打印到终端,而不是保存到文件。

2. 将文件保存到指定位置

要将下载的文件保存到本地文件系统,你可以使用 -o-O 选项。

2.1 使用 -o (小写 o) 保存为指定文件名

-o <file> 允许你指定本地文件的路径和名称。

示例:file.zip 下载并保存为 my_downloaded_file.zip
bash
curl -o my_downloaded_file.zip http://example.com/path/to/your/file.zip

如果文件位于不同的路径,你也可以指定:
bash
curl -o ~/Downloads/my_downloaded_file.zip http://example.com/path/to/your/file.zip

2.2 使用 -O (大写 O) 保存为原始文件名

-O 选项会自动将文件保存到当前目录,并使用 URL 中包含的原始文件名。

示例:file.zip 下载并保存为 file.zip
bash
curl -O http://example.com/path/to/your/file.zip

如果你想在特定目录保存,需要先 cd 到该目录。

3. 显示下载进度

默认情况下,cURL 会显示一个进度条。如果你需要更详细或更简洁的输出:

  • 显示进度条 (默认行为,无需额外参数):
    bash
    curl -O http://example.com/large_file.tar.gz
  • 不显示进度条,只显示错误信息 (静默模式): 使用 -s--silent
    bash
    curl -s -O http://example.com/path/to/your/file.zip
  • 显示下载速度等更详细的信息 (但没有进度条): 使用 -v--verbose
    bash
    curl -v -O http://example.com/path/to/your/file.zip

4. 恢复中断的下载

如果下载大文件时网络中断,或者你手动停止了下载,cURL 可以使用 -C ---continue-at - 选项从中断处恢复下载。

重要: 恢复下载时,必须使用与首次下载相同的本地文件名。

示例:
bash
curl -C - -O http://example.com/path/to/your/large_file.iso

cURL 会检查本地文件的大小,并告诉服务器从哪个字节开始发送数据。

5. 下载多个文件

cURL 可以通过简单的 Bash 循环或指定多个 URL 来下载多个文件。

5.1 使用 Bash 循环

bash
for url in "http://example.com/file1.zip" "http://example.com/file2.zip"; do
curl -O "$url"
done

5.2 从文件读取 URL 列表

如果有很多 URL,可以将它们放在一个文本文件中 (每行一个 URL),然后结合 xargswhile read 命令。

urls.txt 内容:
http://example.com/fileA.zip
http://example.com/fileB.tar.gz

使用 xargs
bash
xargs -n 1 curl -O < urls.txt

-n 1 表示每次只将一个 URL 传递给 curl 命令。

6. 处理重定向

默认情况下,cURL 不会自动跟随 HTTP 3xx 重定向。如果你需要下载重定向后的资源,请使用 -L--location

示例:
bash
curl -L -O http://example.com/redirects/to/actual_file.zip

这将确保 cURL 遵循服务器的重定向指令,直到找到最终的文件位置。

7. 使用身份验证下载文件

如果文件受 HTTP 基本身份验证保护,你可以使用 -u--user 选项提供用户名和密码。

示例:
bash
curl -u username:password -O http://example.com/secure/file.pdf

如果你省略密码,cURL 会在执行时提示你输入密码,这对于脚本来说更安全。
bash
curl -u username -O http://example.com/secure/file.pdf

8. 下载到 FTP/SFTP 服务器

cURL 不仅可以从 FTP/SFTP 下载,也可以作为客户端将文件上传或下载到这些服务器。

从 FTP 下载:
bash
curl -u ftpuser:ftppass -O ftp://ftp.example.com/remote/path/ftp_file.txt

从 SFTP 下载:
bash
curl -u sftpuser:sftppass -O sftp://sftp.example.com/remote/path/sftp_file.txt

请注意,对于 SFTP,你可能还需要处理 SSH 密钥。

9. 限制下载速度

如果你想限制 cURL 的下载速度,以避免占用所有带宽,可以使用 --limit-rate 选项。

示例: 将下载速度限制在 100KB/s:
bash
curl --limit-rate 100K -O http://example.com/large_file.zip

你可以使用 K (千字节)、M (兆字节)、G (吉字节) 作为单位。

10. 处理不安全的 HTTPS 连接 (不推荐用于生产)

在某些测试或开发环境中,你可能会遇到使用自签名证书的 HTTPS 服务器,这会导致 cURL 拒绝连接。
你可以使用 -k--insecure 选项禁用证书验证。

警告: 切勿在生产环境中使用此选项,因为它会使你的连接容易受到中间人攻击。

示例:
bash
curl -k -O https://self-signed.example.com/secure_file.dat

总结

cURL 是一个功能丰富的工具,用于各种数据传输任务,尤其是在命令行下下载文件。通过掌握上述选项,你可以高效、灵活地处理各种下载需求。记住,始终优先使用 HTTPS 来保护你的数据传输,并在必要时合理利用 -L-C - 等选项来增强下载体验。

滚动至顶部