curl 命令详解:命令行下的 HTTP 访问利器
curl 是一款功能强大的命令行工具,支持 HTTP、HTTPS、FTP 等多种协议,可用于发送 HTTP 请求、获取网页内容、调试接口等。本文将详细介绍 curl 的核心用法和常用参数,帮助你高效在命令行中进行网络交互。
基础用法:发起简单请求
1. 发送 GET 请求(默认)
直接指定 URL 即可发送 GET 请求,返回响应体内容:
输出结果为网页的 HTML 源代码,适合快速查看简单接口的返回数据。
查看响应头:-i 与 -I 参数
1. -i:显示响应头 + 响应体
输出示例:
1 2 3 4 5 6 7
| HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform ...(响应头内容)...
<!DOCTYPE html> ...(响应体 HTML 内容)...
|
适合需要同时查看响应头和响应体的场景(如调试接口状态码、Cookie 等)。
2. -I:仅显示响应头
输出示例:
1 2 3 4 5 6
| HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform Content-Length: 277 Content-Type: text/html ...
|
常用于检查接口的状态码(如 200、404、500)、缓存策略、服务器信息等。
自定义请求头:-H 参数
使用 -H 可以添加或修改 HTTP 请求头,格式为 键: 值,多个请求头需多次使用 -H。
1. 设置 Content-Type
1 2
| curl "http://localhost:8080/api/user" -H "Content-Type: application/json"
|
2. 添加认证头(如 Token)
1 2
| curl "http://localhost:8080/api/data" -H "Authorization: Bearer xxxxxxxx"
|
3. 模拟浏览器请求(添加 User-Agent)
部分网站会拦截命令行请求,可通过修改 User-Agent 模拟浏览器:
1
| curl "http://example.com" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/90.0.4430.93"
|
发送 POST 请求:-d 参数
-d 用于指定 POST 请求的数据,默认 Content-Type 为 application/x-www-form-urlencoded(表单格式)。
1. 发送表单数据
1 2
| curl "http://localhost:8080/addUser" -d "name=张三&age=20"
|
2. 发送 JSON 数据
结合 -H 指定 Content-Type 为 application/json:
1 2 3 4 5 6 7
| curl "http://localhost:8080/addUser" \ -H "Content-Type: application/json" \ -d '{ "name": "张三", "age": 20, "gender": "male" }'
|
- 注意 JSON 字符串需用单引号包裹,避免双引号与 shell 冲突。
- 反斜杠
\ 用于换行,使命令更易读。
指定请求方法:-X 参数
-X 可强制指定请求方法(如 GET、POST、PUT、DELETE 等),覆盖默认行为。
1. 发送 PUT 请求
1 2 3 4
| curl -X PUT "http://localhost:8080/updateUser/1" \ -H "Content-Type: application/json" \ -d '{"age": 21}'
|
2. 发送 DELETE 请求
1 2
| curl -X DELETE "http://localhost:8080/deleteUser/1"
|
处理 URL 参数:-G 与 --data-urlencode
1. -G:将 -d 数据转为 GET 参数
默认情况下,-d 用于 POST 数据,结合 -G 可将数据拼接为 GET 请求的查询参数:
1 2
| curl -G "http://localhost:8080/search" -d "keyword=test" -d "page=1"
|
2. --data-urlencode:自动编码特殊字符
当参数包含中文、空格等特殊字符时,--data-urlencode 会自动进行 URL 编码:
1 2
| curl -G "http://localhost:8080/search" --data-urlencode "name=张三"
|
等价于手动访问:http://localhost:8080/search?name=%E5%BC%A0%E4%B8%89。
文件上传:-F 参数
-F 用于模拟表单上传文件,默认 Content-Type 为 multipart/form-data。
1. 上传单个文件
1 2
| curl "http://localhost:8080/upload" -F "file=@test.doc"
|
2. 同时上传文件和其他参数
1 2 3 4
| curl "http://localhost:8080/upload" \ -F "file=@report.pdf" \ -F "description=月度报告"
|
其他实用参数
1. -L:自动跟随重定向
当请求返回 301/302 重定向时,-L 会自动跳转至目标 URL:
1 2
| curl -L http://baidu.com
|
2. -o/-O:保存响应到文件
1 2
| curl -O http://example.com/images/image.jpg
|
3. -s:静默模式(不显示进度和错误)
适合脚本中使用,仅输出响应内容:
1 2
| curl -s "http://localhost:8080/api/status"
|
4. -v:调试模式(显示完整请求过程)
用于排查网络问题,显示请求头、响应头、TCP 连接等细节:
v1.3.10