curl wget及其它常用工具
curl
以其广泛的协议支持和灵活的控制能力而著称,而 wget
则因其非交互式、稳定可靠的下载能力和递归功能而广受欢迎。它们是文件下载、API 交互、网站镜像等任务中不可或缺的命令行工具。
工具 | 用途简述 | 特点概括 |
---|---|---|
curl | 万能 HTTP 请求构造工具 | 支持 GET/POST/PUT/DELETE 等 |
wget | 下载文件利器(支持递归、断点) | 易用、稳定、支持多协议 |
httpie | 更易读的 API 请求构造工具 | json友好,语法直观 |
scp | SSH 安全文件复制 | 简洁、需 SSH 连接 |
rsync | 增量同步工具 | 快速、节省带宽 |
aria2 | 多协议多线程下载器 | BT、磁链、HTTP 多线程支持 |
curl
是一个非常强大且灵活的工具,支持多种网络协议,包括 HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、SMB、DICT、TELNET 等。它不仅可以下载文件,还可以上传文件、与 API 交互(发送 GET、POST、PUT、DELETE 请求)、处理 Cookie、支持代理等。
1. curl
常用命令示例
1 | # 基础使用 |
1.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
等众多协议。这使得它成为一个万能的数据传输工具,无论你是想下载一个文件、测试一个 API、发送 HTTP 请求还是进行协议调试,curl
都能胜任。
curl
的核心是其能够模拟各种客户端行为,发送自定义请求,并接收服务器响应。它既可以下载文件,也可以用于上传数据。
深入解析与高级应用
- 基本下载与显示:
curl <URL>
: 默认会向 URL 发送 GET 请求,并将服务器响应(通常是文件内容)输出到标准输出。- 示例:
curl example.com
(显示网页内容) - 示例:
curl -O <URL>
: 将 URL 对应的内容保存到当前目录下,文件名与 URL 中的文件名相同。curl -O https://example.com/file.zip
- 示例:
curl -o <filename> <URL>
: 将 URL 对应的内容保存到指定文件中。curl -o my_page.html example.com
- 示例:
- HTTP/HTTPS 高级请求:
curl
在 HTTP/HTTPS 方面功能尤其强大。-X <METHOD>
(request method): 指定 HTTP 请求方法(GET, POST, PUT, DELETE, HEAD 等)。- 示例:
curl -X POST https://api.example.com/data
- 示例:
-H <header>
(header): 添加自定义 HTTP 请求头。- 用途: 发送认证令牌、指定
Content-Type
、自定义User-Agent
等。 - 示例:
curl -H "Authorization: Bearer my_token" -H "Content-Type: application/json" https://api.example.com/resource
- 用途: 发送认证令牌、指定
-d <data>
(data): 发送 POST 请求的数据。默认以application/x-www-form-urlencoded
格式发送。- 用途: 提交表单数据或 JSON 数据。
- 示例 (表单):
curl -d "name=John Doe&age=30" https://example.com/submit
- 示例 (JSON):
curl -H "Content-Type: application/json" -d '{"key":"value"}' https://api.example.com/data
--data-binary <data>
: 发送原始二进制数据,不进行 URL 编码。- 用途: 上传文件内容或发送原始请求体。
- 示例:
curl --data-binary @image.jpg https://example.com/upload
(上传本地文件image.jpg
的内容)
-F <name=value>
(form): 发送multipart/form-data
类型的数据(用于文件上传)。- 示例:
curl -F "file=@/path/to/local/file.txt" -F "description=My file" https://example.com/upload
- 示例:
-u <user:password>
(user): 指定认证的用户名和密码。- 用途: HTTP Basic Authentication。
- 示例:
curl -u admin:password http://api.example.com/protected
-L
(location): 跟随 HTTP 3xx 重定向。- 用途: 访问被重定向的 URL。
- 示例:
curl -L http://old-domain.com
-I
(head): 只获取 HTTP 响应头,不下载内容。- 用途: 快速检查 URL 是否可达、状态码、服务器信息等。
- 示例:
curl -I https://example.com
--verbose
(or-v
): 显示详细的通信过程,包括请求头、响应头、SSL/TLS 握手信息等。- 用途: 调试网络请求、分析协议行为。
- 示例:
curl -v https://api.example.com/test
- Cookies:
-b <file>
(cookie-jar): 从文件中读取 cookies 发送。-c <file>
(cookie-jar): 将接收到的 cookies 写入文件。- 用途: 模拟浏览器会话,进行带有会话管理功能的测试。
- 示例:
curl -c cookies.txt https://example.com/login
->curl -b cookies.txt https://example.com/profile
- SSL/TLS 控制:
-k
(insecure): 禁用 SSL/TLS 证书验证。- 风险: 生产环境不推荐,但调试自签名证书或临时测试时有用。
- 示例:
curl -k https://self-signed.example.com
--cacert <file>
: 指定 CA 证书文件,用于验证服务器证书。--cert <file>
: 指定客户端证书文件。
- 代理:
-x <[protocol://]host[:port]>
(proxy): 通过代理服务器发送请求。- 示例:
curl -x http://myproxy.com:8080 http://example.com
- 示例:
- 速度限制与超时:
--limit-rate <speed>
: 限制传输速度。--connect-timeout <seconds>
: 连接超时。-m <seconds>
(max-time): 总操作超时。
curl
与其他工具:curl
是一个数据传输工具,它的输出通常是原始的 HTTP 响应体。你经常需要结合其他工具来解析这些数据:curl ... | jq '.'
(解析 JSON)curl ... | xmllint --format -
(格式化 XML)curl ... | grep "keyword"
(过滤特定内容)
curl
的优势
- 协议支持广泛: 几乎能处理所有常见的网络协议。
- 高度可定制: 可以完全控制请求头、请求体、认证、Cookie、代理等。
- 脚本友好: 命令行接口简洁,易于在脚本中集成。
- 调试利器: 详细的
-v
输出和错误处理能力使其成为网络协议调试的首选。 - 跨平台: 在所有主流操作系统上均可用。
实际应用场景
- API 测试与交互: 模拟各种 HTTP 请求(GET/POST/PUT/DELETE),测试 RESTful API 接口。
- 网站内容抓取: 获取网页 HTML 内容,进行数据分析或自动化。
- 文件下载与上传: 安全高效地下载和上传文件(支持 FTP, SFTP, HTTP/S)。
- 网络服务健康检查: 通过发送特定请求检查服务的响应状态。
- 自动化脚本: 用于 CI/CD 流程、监控脚本等自动化任务中进行网络通信。
- 协议调试: 深入分析 HTTP/HTTPS、FTP 等协议的通信过程。
2. wget
常用命令示例
1 | # 基本下载 下载文件到当前目录 |
2.1. wget
:非交互式网络下载器
wget
是一个非交互式的命令行下载工具,主要用于从 Web 和 FTP 服务器下载文件。它特别适合在后台运行,并在网络不稳定时具有强大的断点续传能力。与 curl
相比,wget
更专注于文件的下载,而不是通用的数据传输和协议测试。
wget
的核心能力是稳定地下载文件,包括支持递归下载整个网站、处理重定向、以及在下载中断后恢复。
深入解析与高级应用
- 基本下载:
wget <URL>
: 将 URL 指定的文件下载到当前目录。- 示例:
wget https://example.com/file.zip
- 示例:
wget -O <filename> <URL>
: 将下载内容保存到指定文件中。- 示例:
wget -O my_archive.tar.gz http://example.com/archive.tar.gz
- 示例:
- 断点续传 (
-c
):wget -c <URL>
: 从上次中断的地方继续下载。- 用途: 对于大文件或网络连接不稳定的情况非常有用。
- 示例:
wget -c https://large_file.iso
(即使下载中断,下次运行此命令也能从上次断点继续)
- 递归下载 (
-r
):wget -r <URL>
: 递归下载整个网站或指定目录。- 用途: 下载网站镜像、离线浏览。
- 风险: 小心使用,可能下载大量不必要的内容,甚至触发服务器限制。
- 示例:
wget -r https://example.com/docs/
-l <depth>
(level): 设置递归下载的深度。- 示例:
wget -r -l 2 https://example.com
(只下载两层目录)
- 示例:
-np
(no-parent): 不追溯到父目录。配合-r
使用,防止下载不相关的内容。-k
(convert links): 将下载的 HTML 文档中的链接转换为相对链接,以便离线浏览。-p
(page-requisites): 下载所有显示网页所需的图片、CSS、JS 等文件。- 示例:
wget -r -l inf -np -k -p http://example.com/
(下载整个网站并转换为离线浏览)
- 示例:
- 后台下载 (
-b
):wget -b <URL>
: 在后台执行下载,并将日志输出到wget-log
文件。- 用途: 启动长时间下载后可以关闭终端。
- 示例:
wget -b https://very_large_file.zip
- 限速与重试:
--limit-rate=<speed>
: 限制下载速度。- 示例:
wget --limit-rate=100k https://example.com/file.zip
(限制为 100 KB/s)
- 示例:
--tries=<number>
: 设置重试次数。默认通常是 20 次。--retry-connrefused
: 即使连接被拒绝也重试。
- HTTP/HTTPS 相关:
--user-agent=<agent-string>
: 设置User-Agent
字符串。--header=<header-string>
: 添加自定义 HTTP 头。--post-data=<data>
/--post-file=<file>
: 发送 POST 请求。--no-check-certificate
: 不验证 SSL/TLS 证书(与curl -k
类似,不推荐生产使用)。
- 认证:
--user=<user>
/--password=<password>
: HTTP 或 FTP 认证。--ask-password
: 交互式地询问密码。
curl
vs. wget
总结
curl
: 更像是数据传输的瑞士军刀。它专注于数据的输入和输出,支持更多协议,能够精确控制请求的每个细节(如各种 HTTP 头、请求方法、数据体),并且输出可以很容易地被管道到其他工具进行处理。它是进行 API 测试、Web 调试、协议分析和复杂数据交互的首选。wget
: 更专注于文件的下载和网站的镜像。它具有强大的递归下载、断点续传和后台运行能力,更适合于自动化下载任务、创建本地网站副本等场景。
实际应用场景
curl
:- 测试 RESTful API 端点。
- 通过
POST
请求提交数据到 Web 表单或服务。 - 获取 HTTP 响应头以调试 Web 服务器。
- 模拟用户代理或 referrer 来访问特定内容。
- 在脚本中与各种网络服务进行数据交换。
wget
:- 下载软件包、ISO 镜像或其他大型文件。
- 创建网站的本地备份或离线镜像。
- 在服务器上执行非交互式文件下载任务。
- 编写下载脚本,利用其断点续传和重试机制。
这两款工具在功能上有所重叠,但各自的侧重点和设计哲学不同。在实际工作中,你会发现它们都是不可或缺的,通常会根据具体任务的特点来选择使用哪一个。
3. httpie
常用命令示例(推荐调试 API)
1 | # 基本 GET 请求 |
4. scp
和 rsync
命令示例(远程复制)
1 | # 上传本地文件到远程服务器 |
5. aria2c
命令示例(多线程 + 多协议下载)
1 | # 基本下载 |