curl 下载文件教程:掌握命令行文件传输技巧 – wiki大全

“`markdown

curl 下载文件教程:掌握命令行文件传输技巧

curl (Client URL) 是一个功能强大的命令行工具,用于传输数据,支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。对于开发者、系统管理员以及任何需要从命令行下载文件的用户来说,curl 是一个不可或缺的工具。本文将详细介绍如何使用 curl 下载文件,助您掌握这一高效的命令行文件传输技巧。

1. curl 简介与安装

curl 几乎预装在所有类 Unix 系统(如 Linux 和 macOS)上。在 Windows 上,您可以通过 Git Bash、WSL (Windows Subsystem for Linux) 或直接从 curl 官网下载安装。

curl 的主要优势在于其灵活性和自动化能力,尤其适用于脚本编程和远程服务器操作。

2. 基本文件下载

最简单的文件下载方式是直接指定 URL。

2.1 保存为原始文件名

使用 -O (大写 O) 选项,curl 会尝试从 URL 中提取文件名,并将其保存到当前目录。

命令格式:
bash
curl -O [URL]

示例:
下载 example.com/file.zip 并保存为 file.zip
bash
curl -O https://example.com/file.zip

2.2 保存为指定文件名

使用 -o (小写 o) 选项,您可以指定下载文件的本地文件名。

命令格式:
bash
curl -o [本地文件名] [URL]

示例:
下载 example.com/file.zip 并保存为 my_archive.zip
bash
curl -o my_archive.zip https://example.com/file.zip

3. 显示下载进度

curl 在下载时默认会显示一个进度条和统计信息。

进度条解读:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 100M 100 100M 0 0 10.0M 0 --:--:-- 0:00:09 --:--:-- 10.0M

% Total: 总下载量百分比
% Received: 已接收数据百分比
% Xferd: 总传输量百分比 (下载 + 上传)
Average Speed: 平均下载速度
Time Total: 预计总时间
Time Spent: 已花费时间
Time Left: 剩余时间
Current Speed: 当前下载速度

如果您不希望看到进度条,可以使用 -s--silent 选项。

示例:
静默下载文件,不显示进度条。
bash
curl -s -O https://example.com/file.zip

4. 恢复中断的下载

网络不稳定或文件过大时,下载可能会中断。curl 提供了强大的断点续传功能,使用 -C - 选项即可。

命令格式:
bash
curl -C - -O [URL]

示例:
如果 my_archive.zip 下载中断,执行以下命令可以从上次中断的地方继续下载:
bash
curl -C - -o my_archive.zip https://example.com/file.zip

-C - 会让 curl 自动检测本地文件的大小,并从正确的位置开始续传。

5. 处理重定向

许多网站在访问资源时会使用 HTTP 重定向(例如,从 HTTP 到 HTTPS,或从旧 URL 到新 URL)。curl 默认不跟随这些重定向。要让 curl 自动跟随重定向,请使用 -L--location 选项。

命令格式:
bash
curl -L -O [URL]

示例:
如果 http://short.url/file.zip 重定向到 https://long.url/actual_file.zip
bash
curl -L -O http://short.url/file.zip

curl 会自动跟随重定向并下载最终的文件。

6. 下载受认证保护的文件

如果文件位于需要用户名和密码的服务器上(例如,HTTP Basic Authentication 或 FTP 认证),可以使用 -u--user 选项提供凭据。

命令格式:
bash
curl -u [用户名:密码] -O [URL]

示例:
bash
curl -u myuser:mypassword -O https://secure.example.com/private_file.pdf

注意: 在命令行中直接输入密码可能不安全,因为它会保留在您的shell历史记录中。对于更安全的方法,您可以只提供用户名,curl 会提示您输入密码。
bash
curl -u myuser -O https://secure.example.com/private_file.pdf

7. 下载多个文件

curl 本身一次只能下载一个文件。要下载多个文件,您需要结合 curl 和 shell 脚本(例如 bash 循环)来实现。

示例 (Bash 脚本):
“`bash

!/bin/bash

urls=(
“https://example.com/file1.zip”
“https://example.com/file2.tar.gz”
“https://example.com/image.jpg”
)

for url in “${urls[@]}”; do
echo “Downloading $url…”
curl -L -O “$url”
if [ $? -eq 0 ]; then
echo “Successfully downloaded $url”
else
echo “Failed to download $url” >&2
fi
done
“`

8. 其他高级用法(简述)

  • 限速下载: 使用 --limit-rate 选项可以限制下载速度,例如 --limit-rate 1M 限制为 1MB/s。
  • 设置超时: 使用 --max-time 选项设置下载的最大允许时间。
  • 代理: 使用 -x--proxy 选项通过代理服务器下载。
  • 自定义 User-Agent: 使用 -A--user-agent 选项发送自定义的 User-Agent 字符串。
  • 发送 Referer: 使用 --referer 选项模拟来源页面。
  • 使用 Cookie: 使用 -b 选项发送 Cookie,使用 -c 选项保存 Cookie。

9. 常见问题与故障排除

  • curl: (6) Could not resolve host: 表明 curl 无法解析主机名,可能是网络连接问题或域名拼写错误。
  • curl: (7) Failed to connect to host port 443: Connection refused: 通常表示目标服务器拒绝连接,可能端口未开放或防火墙阻止。
  • curl: (22) The requested URL returned error: 404 Not Found: 资源不存在。检查 URL 是否正确。
  • curl: (35) SSL connect error: SSL/TLS 连接问题,可能是证书无效或服务器配置错误。
  • 确保 URL 完整且正确: 尤其要注意 http://https:// 前缀。

总结

curl 是一个极其强大和灵活的命令行工具,其在文件下载方面的应用远不止于此。通过掌握 -O-o-C --L 等核心选项,您将能够高效、可靠地从命令行进行文件传输。无论是日常工作中的快速下载,还是自动化脚本中的数据获取,curl 都能为您提供坚实的支持。多加实践,您会发现 curl 的更多潜能。
“`

滚动至顶部