在安全分析和接口测试中,我们经常需要脱离浏览器图形界面,直接通过命令行工具 curl 来构造、重放和调试 HTTP 请求。 掌握 curl 之后,我们可以更自由地观察请求细节、重放浏览器发出的请求,并快速验证接口行为。
准备命令行环境
打开本机终端,或 WSL、Kali Linux 等环境中的终端,将实验任务中给出的 Web 入口地址保存到环境变量中。
请将下面命令里的 https://你的实验入口URL 替换为你自己的真实实验地址:
crow@kali:~$ target_url="https://你的实验入口URL"
crow@kali:~$ target_url=${target_url%/}
这里使用 ${target_url%/} 的目的是去掉 URL 末尾可能存在的斜杠,避免后续拼接地址时出现双斜杠。
接下来,使用 curl 获取网站首页的 HTML,并保存到本地文件中:
crow@kali:~$ curl -sS "$target_url/" -o home.html
crow@kali:~$ head -n 3 home.html
<!doctype html>
<html lang="zh-CN">
<head>
命令说明如下:
-sS:静默模式,隐藏下载进度条,只在发生网络错误时显示错误信息;-o home.html:将服务器返回的响应体保存到home.html文件中;"$target_url/":使用双引号包裹 URL,避免 Shell 将特殊字符错误解析。
浏览器与 curl 的联动:Copy as cURL
浏览器自带的开发者工具可以帮我们更轻松地还原真实请求。 在 Network 面板中,我们可以右键点击任意一条已经捕获的请求,选择 Copy → Copy as cURL:

将复制出来的 curl 命令粘贴到终端中直接执行,就可以尽量完整、准确地重现浏览器刚才发出的请求,包括请求方法、请求头、查询参数、表单数据等信息。
对于需要复现登录状态、携带特殊请求头或测试异常参数的场景,这个能力非常实用。
curl 常用实战参数速查
| 参数选项 | 功能与核心用途 |
|---|---|
-i | 同时显示响应头和响应体 |
-I | 发送 HEAD 请求,只获取响应头 |
-D - | 发送 GET 请求,并将响应头输出到终端;配合 -o /dev/null 可以只显示响应头 |
-v | 详细调试模式,显示 TCP 连接、TLS 握手、请求头 > 和响应头 < 等完整过程 |
-A "自定义UA" | 自定义或修改 User-Agent 请求头 |
-H "Header: Value" | 添加任意自定义请求头,例如 -H "Content-Type: application/json" |
-d "data" | 发送 POST 请求,并携带请求体数据 |
-c cookies.txt | 将服务器返回的 Set-Cookie 保存到本地文件,相当于写入 Cookie |
-b cookies.txt | 在请求中自动携带本地文件里的 Cookie,相当于读取 Cookie |
-L | 自动跟随服务器返回的 3xx 重定向 |
这些参数组合起来,可以覆盖大多数接口测试和请求调试场景。
例如,想只看响应头,可以使用 -I;想同时保留 Cookie 并继续请求,则可以先用 -c 保存 Cookie,再用 -b 读取 Cookie。
其中最常用到的是 -H,它让我们自己指定请求头。服务器有时会根据请求头返回不同内容,用 curl 就能改一个头再看结果。

