火柴人武林大会
156.74M · 2026-02-04
作为一个后端开发人员(Java/Go),curl (Client URL) 是你调试 API、排查网络问题和编写自动化脚本时最强大的瑞士军刀。接下来讲讲,如何使用curl,以及实战如何使用curl
curl 的全称是 Client URL。它的核心逻辑非常简单:向服务器发请求,把结果拿回来
当你只输入 URL 时,默认就是 GET 请求,结果直接打印在终端(stdout)。下面就是一条非常朴素的curl
curl
作为 Java/Go 开发者,你 90% 的场景是在调试 RESTful API。这里有三个必背参数:-X (方法) 、-H (头) 、-d (体)
curl -X POST
-H "Content-Type: application/json"
-d '{"username": "admin", "password": "123"}'
curl虽然可以自动生成,但理解核心参数对于手动微调至关重要。
最简单的一个curl格式如下:
curl [options] [URL]
下面是一个命令表,可以对应着看:
| 参数 | 全称 | 作用 | 示例 |
|---|---|---|---|
| -X | --request | 指定 HTTP 方法 (GET, POST, PUT, DELETE) | -X POST |
| -H | --header | 设置请求头 (可多次使用) | -H "Content-Type: application/json" |
| -d | --data | 发送 POST 数据 (默认会设为 POST 方法) | -d '{"id": 1}' |
| -v | --verbose | 调试神器,显示详细的握手、Header 交互过程 | -v |
| -i | --include | 在输出结果中包含响应头 (HTTP Response Headers) | -i |
| -o | --output | 将输出保存到文件,而不是打印在屏幕上 | -o output.json |
| -L | --location | 跟随重定向 (比如 301/302 跳转) | -L |
| -k | --insecure | 允许连接不安全的 SSL (自签名证书) | -k |
我们一般不手写curl命令,因为手写容易出错,当然也有手写的时候(调试或者测接口速度)。但是我们一般怎么生成curl命令呢?
当你需要复现前端发起的请求,或者通过浏览器抓包调试时:
F12 打开开发者工具。在这些非常常用的后端调试工具中,也是可以生成curl的
用ApiPost来举例子
不知道你知不知道idea里面也可以使用curl呢?非常简单好用,当我们不想使用调试工具的时候,可以在idea等IDE里面快速发起一次请求,反正我自己就非常喜欢在idea里面这样做,简洁简单高效!
1.可以编写一个.http后缀的文件,如下图所示
2.curl转换成http
3.然后就能生成一个http请求执行
如果你是 Java 开发者,安装了 Spring 插件:
Controller 代码行号旁边,会有一个小图标。curl 都省了当然,IDEA 自带的底部 Terminal 就是一个完整的 Shell。
curl。curl 命令了。当线上服务出现“奇怪的问题”——比如偶尔超时、握手失败、接口过慢、或者返回莫名其妙的 400 错误时,curl 的深层能力就派上用场了
-v)-v (verbose) 是调试神器。它会打印出通信的每一个细节:
* 开头:curl 自身的日志(解析 IP、握手过程)。> 开头:发送出去的数据(Request)。< 开头:接收回来的数据(Response)。场景: 排查 HTTPS 证书错误,或者确认反向代理(Nginx)是否修改了你的 Header
curl -v
-k)在内网开发(特别是 Java Spring Boot 配置了自签名证书时),curl 会报错 SSL certificate problem。 加上 -k (insecure) 可以跳过证书验证
-w) —— 后端必知这是许多中高级开发都不知道的隐藏功能。当你需要分析接口到底慢在哪里(是 DNS 慢?TCP 建连慢?还是 Java 代码处理慢?)时,可以使用 -w 自定义输出格式
创建一个格式文件 curl-fmt.txt:
n
DNS解析: %{time_namelookup} s
TCP建连: %{time_connect} s
SSL握手: %{time_appconnect} s
首包时间: %{time_starttransfer} s (TTFB)
总耗时: %{time_total} s
n
执行命令:
curl -w "@curl-fmt.txt" -o /dev/null -s
可能输出以下结果:
DNS解析: 0.004 s
TCP建连: 0.020 s
SSL握手: 0.055 s
首包时间: 0.120 s <-- 这里慢说明服务器处理逻辑慢
总耗时: 0.121 s
既然你可以生成 Curl,你也可以把 Curl 变回代码。这在对接第三方 API 时非常有用。
curl 命令,它会自动生成标准的 Go (net/http) 或 Java (HttpClient / OkHttp) 代码。无论是新手还是老手,看了这篇文章或许你都能学到不少东西,或许学到了新东西?总之curl是一个非常实用的工具,简单且好用,实际开发与调试非常常用。