Curl 下载文件:基础入门与指南
curl 是一个功能强大的命令行工具,用于通过各种协议传输数据,其中最常见的用途之一就是从网络上下载文件。无论您是系统管理员、开发人员,还是仅仅需要在终端中快速获取文件,curl 都是一个不可或缺的工具。
本文将详细介绍 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 等多种协议。它被设计用于无需用户交互即可传输数据。
2. 基本文件下载
最常见的 curl 用法是下载文件。这里有两种基本方式:
2.1 使用原始文件名下载 (-O, --remote-name)
这是最直接的方式。curl 会根据 URL 中文件的名称,在当前目录下创建一个同名文件。
命令格式:
bash
curl -O [URL]
示例:
bash
curl -O https://example.com/somefile.zip
这将在当前目录下载 somefile.zip。
2.2 指定输出文件名 (-o, --output)
如果您想将下载的文件保存为不同的名称,或者保存到特定路径,可以使用 -o 选项。
命令格式:
bash
curl -o [本地文件名] [URL]
示例:
bash
curl -o my_custom_archive.zip https://example.com/somefile.zip
这会将 somefile.zip 下载并保存为 my_custom_archive.zip。
bash
curl -o /tmp/downloaded_file.txt https://example.com/data.txt
这会将 data.txt 下载到 /tmp 目录并保存为 downloaded_file.txt。
3. 高级下载选项
3.1 恢复中断的下载 (-C, --continue-at)
如果下载中断(例如网络问题),您可以使用 -C - 选项从上次中断的地方继续下载。这对于下载大文件非常有用。
命令格式:
“`bash
curl -C – -O [URL]
或者
curl -C – -o [本地文件名] [URL]
“`
示例:
假设您之前执行了 curl -O https://example.com/largefile.iso 但中断了。要恢复:
bash
curl -C - -O https://example.com/largefile.iso
curl 会检查本地是否存在同名文件,并从文件末尾继续下载。
注意: -C - 是一个特殊的参数,它告诉 curl 自动查找并从已下载数据的大小开始。如果您知道确切的字节偏移量,也可以指定数字,例如 -C 1024 表示从文件的第1024个字节开始。
3.2 跟踪重定向 (-L, --location)
许多网站在访问文件时会使用 HTTP 重定向(例如,从 HTTP 到 HTTPS,或从一个服务器重定向到另一个服务器)。默认情况下,curl 不会自动跟踪这些重定向。使用 -L 选项可以确保 curl 遵循所有重定向直到找到最终资源。
命令格式:
bash
curl -L -O [URL]
示例:
bash
curl -L -O http://short-url.com/download-link
即使 short-url.com 重定向到其他地方,curl 也会跟踪并下载最终文件。
3.3 限制下载速度 (--limit-rate)
在某些情况下,您可能希望限制 curl 的下载速度,以避免占用所有带宽。--limit-rate 选项允许您指定最大传输速率。
命令格式:
bash
curl --limit-rate [速度] -O [URL]
速度可以使用 k (千字节), m (兆字节), g (吉字节) 后缀。
示例:
限制下载速度为 100KB/s:
bash
curl --limit-rate 100k -O https://example.com/hugefile.bin
3.4 静默模式与详细模式 (-s, --silent 和 -v, --verbose)
- 静默模式 (
-s):curl默认会显示下载进度条和传输统计信息。如果您只关心下载结果,不希望看到这些输出,可以使用-s选项。
bash
curl -s -O https://example.com/file.txt - 详细模式 (
-v): 如果您需要查看curl的详细操作过程,包括请求头、响应头、SSL/TLS 握手信息等,可以使用-v选项。这对于调试非常有用。
bash
curl -v -O https://example.com/file.txt
3.5 通过 HTTP 认证下载 (-u, --user)
如果文件受 HTTP 基本认证或摘要认证保护,您可以使用 -u 选项提供用户名和密码。
命令格式:
bash
curl -u [用户名]:[密码] -O [URL]
示例:
bash
curl -u myuser:mypassword -O https://secure.example.com/protected_file.doc
如果您只提供用户名而不提供密码,curl 会在运行时提示您输入密码。
3.6 下载多个文件
虽然 curl 主要用于下载单个文件,但您可以连续使用 -O 或 -o 选项来下载多个文件。
示例:
bash
curl -O https://example.com/file1.txt -O https://example.com/file2.zip
这会在当前目录下载 file1.txt 和 file2.zip。
3.7 发送自定义 HTTP 头 (-H, --header)
有时,您可能需要发送自定义 HTTP 请求头,例如设置 User-Agent 或 Referer。
命令格式:
bash
curl -H "Header-Name: Header-Value" -O [URL]
示例:
模拟浏览器下载:
bash
curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36" -O https://example.com/downloadable.pdf
3.8 下载到标准输出 (-)
如果您不想将文件保存到磁盘,而是直接将其内容输出到标准输出(例如管道给其他命令),可以使用 -o -。
命令格式:
bash
curl -o - [URL]
示例:
下载一个文本文件并直接在终端显示:
bash
curl -o - https://example.com/robots.txt
下载一个 JSON 文件并使用 jq 进行格式化:
bash
curl -s -o - https://api.example.com/data.json | jq .
4. 常见问题与提示
- HTTPS 证书问题: 如果遇到 SSL 证书验证错误,通常意味着服务器证书有问题,或者您的系统缺少必要的根证书。在测试或特殊情况下,可以使用
-k或--insecure选项禁用证书验证,但不推荐在生产环境中使用。
bash
curl -k -O https://badssl.com/self-signed.pem - 进度条消失: 如果您使用
-s选项,进度条会消失。如果您需要进度条但又想限制其他输出,可以尝试-#或--progress-bar来显示一个简单的进度条。
bash
curl -# -O https://example.com/largefile.zip - 权限问题: 确保您有权限将文件写入指定的输出目录。
- 网络连接:
curl需要稳定的网络连接。如果下载失败,请检查您的网络。
5. 总结
curl 是一个极其灵活和强大的工具,能够满足您几乎所有文件下载的需求。从简单的文件获取到复杂的断点续传、速度限制和认证,它都能轻松应对。掌握这些基本的 curl 下载技巧,将极大地提高您在命令行下的工作效率。
请记住,man curl 永远是您获取最详细和最新帮助的最佳资源。