cURL 文件下载教程:快速入门与实战技巧
在日常开发和系统管理中,我们经常需要在命令行界面(CLI)下进行文件传输。cURL 作为一款功能强大、用途广泛的命令行工具,是进行 HTTP/HTTPS、FTP 等协议文件传输的瑞士军刀。本文将详细介绍如何使用 cURL 进行文件下载,从基础用法到高级实战技巧,助你快速掌握。
1. cURL 简介
cURL(Client for URLs)是一个利用各种协议传输数据的命令行工具。它支持 DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet 和 TFTP。cURL 设计用于在没有用户交互的情况下工作,非常适合自动化任务和脚本。
2. cURL 安装
大多数 Linux 和 macOS 系统都预装了 cURL。你可以在终端中输入 curl --version 来检查是否已安装以及版本信息。
- Linux (Debian/Ubuntu):
bash
sudo apt update
sudo apt install curl - Linux (CentOS/RHEL):
bash
sudo yum install curl - macOS:
cURL 是 macOS 的内置组件。 - Windows:
你可以从 cURL 官网 (curl.se/windows/) 下载预编译的 Windows 版本,并将其添加到系统 PATH 环境变量中,以便在 PowerShell 或命令提示符中使用。
3. cURL 文件下载快速入门
最简单的 cURL 文件下载命令是使用 -O 或 -o 选项。
3.1 -O:以远程文件名保存文件
这个选项会告诉 cURL 将下载的文件保存到当前目录,文件名与远程服务器上的文件名相同。
语法:
bash
curl -O [URL]
示例:
bash
curl -O https://example.com/somefile.zip
这会将 somefile.zip 下载到你的当前目录。
3.2 -o:指定本地文件名保存文件
如果你想将下载的文件保存为不同的本地文件名,或者指定保存路径,可以使用 -o(小写 O)选项。
语法:
bash
curl -o [本地文件名] [URL]
示例:
bash
curl -o my_custom_name.zip https://example.com/somefile.zip
这会将 somefile.zip 下载到当前目录,并将其重命名为 my_custom_name.zip。
指定路径:
bash
curl -o /home/user/downloads/report.pdf https://example.com/report.pdf
这会将 report.pdf 下载并保存到 /home/user/downloads/ 目录下。
4. 实战技巧与高级用法
4.1 显示下载进度
默认情况下,cURL 会显示一个进度条。如果需要更详细的进度信息,可以使用 -v(verbose)或 --progress-bar 选项。
bash
curl -O --progress-bar https://example.com/largefile.tar.gz
4.2 断点续传
如果下载中断,cURL 允许你从上次停止的地方继续下载,这对于下载大文件非常有用。使用 -C - 或 --continue-at - 选项。
语法:
bash
curl -C - -O [URL]
示例:
bash
curl -C - -O https://example.com/very_large_file.iso
如果 very_large_file.iso 已经部分存在,cURL 会检查本地文件大小并从服务器请求剩余部分。
4.3 下载多个文件
你可以在一个命令中指定多个 URL 来下载多个文件。
语法:
bash
curl -O [URL1] -O [URL2] ...
示例:
bash
curl -O https://example.com/file1.txt -O https://example.com/file2.zip
4.4 模拟浏览器(User-Agent)
有些网站会检查 User-Agent 头部信息,拒绝非浏览器请求。你可以使用 -A 或 --user-agent 选项来模拟浏览器。
语法:
bash
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36" -O [URL]
4.5 携带 Referer 头部
某些网站可能会检查 Referer 头部以防止盗链。使用 -e 或 --referer 选项来设置 Referer。
语法:
bash
curl -e "https://some-legit-site.com/page.html" -O [URL]
4.6 认证下载(Basic Authentication)
如果需要通过用户名和密码进行认证才能下载文件,可以使用 -u 或 --user 选项。
语法:
bash
curl -u "username:password" -O [URL]
示例:
bash
curl -u "admin:secretpass" -O https://secure.example.com/private_doc.pdf
请注意,直接在命令行中输入密码可能会暴露在历史记录中,对于敏感场景,应考虑更安全的认证方式或避免在公共环境中执行。
4.7 忽略 SSL/TLS 证书错误
在测试环境或某些特殊情况下,你可能需要忽略 SSL/TLS 证书验证错误。使用 -k 或 --insecure 选项。请务必谨慎使用此选项,因为它会降低安全性。
语法:
bash
curl -k -O [URL_with_self_signed_cert]
4.8 限制下载速度
如果你不希望下载占用所有带宽,可以使用 --limit-rate 选项来限制下载速度。
语法:
bash
curl --limit-rate 1M -O [URL] # 限制为 1 MB/s
curl --limit-rate 500K -O [URL] # 限制为 500 KB/s
4.9 使用代理服务器
如果你的网络环境需要通过代理服务器访问互联网,cURL 可以通过 -x 或 --proxy 选项指定代理。
语法:
bash
curl -x http://your_proxy_ip:port -O [URL]
curl -x http://user:pass@your_proxy_ip:port -O [URL] # 带认证的代理
4.10 下载到标准输出
如果你想将文件内容直接输出到标准输出(例如,管道给另一个命令处理),而不是保存到文件,可以直接省略 -O 或 -o 选项。
示例:
bash
curl https://example.com/config.json | jq .
这将下载 config.json 的内容并将其通过管道传递给 jq 命令进行格式化输出。
5. 常见问题与故障排除
curl: (6) Could not resolve host: 无法解析域名。检查 URL 是否正确,网络连接是否正常,DNS 设置是否有问题。curl: (23) Failed writing body: 文件写入失败。检查目标路径是否有写入权限,磁盘空间是否足够。curl: (7) Failed to connect to host: 无法连接到服务器。检查服务器是否在线,端口是否开放,防火墙设置。curl: (35) SSL connect error: SSL/TLS 连接错误。可能是证书问题,尝试使用-k(不推荐用于生产环境)。
总结
cURL 是一个极其强大的工具,掌握其文件下载功能是每个开发者和系统管理员的必备技能。从简单的 -O 和 -o 下载,到断点续传、认证、代理和速度限制等高级功能,cURL 提供了丰富的选项来满足各种文件传输需求。通过本文的介绍和实战技巧,希望能帮助你更高效、更安全地使用 cURL 进行文件下载。