在软件开发、测试、运维的日常工作中,我们常常需要与 Web 世界打交道:测试 API 接口、下载资源文件、模拟浏览器请求、调试网络异常……这背后最基础的动作,就是发起 HTTP 请求。而在命令行工具中,有两把几乎无可替代的“瑞士军刀”级别的利器——curl
和 wget
。它们功能强大,适用场景广泛,是每一位程序员必不可少的 HTTP 工具箱。
本文将深入剖析 curl
和 wget
的原理、使用场景、对比差异以及进阶用法,帮助你从命令行驾驭整个 Web。
一、curl:构造请求的精密仪器
1.1 curl 是什么?
curl
(Client URL)是一个命令行工具,用于与 URL 语法下的服务器交互。它支持多种协议,包括 HTTP、HTTPS、FTP、SCP、SFTP、LDAP 等,但在 Web 应用中最常见的用途是模拟各种 HTTP 请求,测试 API 接口,以及查看响应内容。
1.2 基础用法
curl https://www.example.com
这一条命令即发起一个 GET 请求,并将响应内容输出到终端。
1.3 常见参数详解
参数 | 说明 |
---|---|
-X | 指定请求方法(如 GET , POST , PUT , DELETE ) |
-d | 发送 POST 数据,格式可为字符串或 JSON |
-H | 添加自定义请求头 |
-o | 将响应保存为文件 |
-I | 仅查看响应头信息 |
-L | 跟随重定向 |
-k | 忽略 HTTPS 证书验证 |
1.4 示例:调用一个 JSON API
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "123456"}'
这条命令模拟了一个登录请求,构造了带有 JSON 体的 POST 请求,常用于测试 RESTful 接口。
二、wget:稳定可靠的下载工具
2.1 wget 是什么?
wget
(World Wide Web get)是一款以非交互模式运行的下载工具,设计之初就为了可靠下载而生。它支持 HTTP、HTTPS、FTP 协议,可以递归下载整个网站、恢复中断的下载、控制下载速率,是系统管理员和数据采集者的首选工具。
2.2 基本用法
wget https://www.example.com/file.zip
该命令会将远程文件下载至当前目录。
2.3 常用参数解析
参数 | 说明 |
---|---|
-c | 断点续传 |
-O | 指定输出文件名 |
--limit-rate | 限速下载(如 --limit-rate=500k ) |
--no-check-certificate | 忽略证书错误 |
-r | 递归下载整个站点 |
--mirror | 镜像网站,保持目录结构 |
--user --password | 提供身份验证信息 |
2.4 示例:镜像一个网站
wget --mirror -p --convert-links -P ./local-copy https://www.example.com
此命令递归下载网页及其依赖资源(如图片、样式表),并转换本地链接,可用于本地离线浏览。
三、curl vs wget:差异与选择
对比维度 | curl | wget |
---|---|---|
设计理念 | 请求构造工具 | 下载工具 |
请求方式支持 | 全支持,灵活构造各种 HTTP 请求 | 以 GET 请求为主,POST 支持有限 |
下载能力 | 简单文件可用 | 更强大:支持断点续传、递归、限速等 |
协议支持 | 多种协议 | 主要支持 HTTP、HTTPS、FTP |
自动重试 | 需要显式配置(如 --retry ) | 默认重试机制较为完善 |
内置并发 | 无(需配合脚本) | 无(可借助 GNU Parallel) |
安装默认性 | macOS/Linux 默认安装,广泛支持 | 某些系统不预装(macOS 需 brew 安装) |
总结选择建议:
-
若你需要调试 API、构造请求、查看响应头,请用 curl
-
若你需要下载文件、网页、进行镜像或断点续传,请用 wget
四、将 curl 和 wget 融入自动化流程
4.1 用 curl 做接口测试脚本
#!/bin/bash
API="https://api.example.com/data"
TOKEN="your-token"
RESPONSE=$(curl -s -X GET "$API" -H "Authorization: Bearer $TOKEN")
if [[ $RESPONSE == *"error"* ]]; then
echo "API 返回错误"
else
echo "接口正常响应"
fi
可用于 API 监控、自动化验证。
4.2 用 wget 抓取静态资源并做本地缓存
wget -r -np -k -P ./mirror https://static.example.com/
-
-r
递归 -
-np
不向上层目录抓取 -
-k
转换链接为本地路径 -
-P
指定下载路径
适用于离线资源打包、CDN 对比等场景。
五、结合现代工具提升能力
尽管 curl
和 wget
功能强大,但当今开发中也可与以下工具协同使用,构建更高效工作流:
-
Postman + curl:Postman 可导出 curl 命令,适合开发调试和脚本联调
-
jq:与 curl 搭配,用于处理 JSON 响应
curl -s https://api.example.com/data | jq '.items[] | .name'
-
cron + wget:周期性抓取远程数据,适用于监控、数据拉取等自动化任务
六、结语:命令行的简洁之美,程序员的掌控之道
curl
与 wget
是命令行世界中少有的“百搭”工具,它们不仅提供了与互联网沟通的最原始方式,也培养了开发者面对 HTTP 协议、API 架构、网络调试的底层直觉。它们不是简单的“命令”,更是一种对 Web 世界的掌控能力。
在 GUI 工具盛行的今天,熟练掌握这两者,将让你在自动化测试、脚本开发、DevOps 运维、数据爬取等多个维度,始终立于不败之地。
掌握 curl 和 wget,不只是掌握两个工具,而是理解网络世界的一把钥匙。