URL访问工具
curl 命令详解:命令行下的 HTTP 访问利器
curl 是一款功能强大的命令行工具,支持 HTTP、HTTPS、FTP 等多种协议,可用于发送 HTTP 请求、获取网页内容、调试接口等。本文将详细介绍 curl 的核心用法和常用参数,帮助你高效在命令行中进行网络交互。
基础用法:发起简单请求
1. 发送 GET 请求(默认)
直接指定 URL 即可发送 GET 请求,返回响应体内容:
# 获取百度首页内容
curl www.baidu.com
输出结果为网页的 HTML 源代码,适合快速查看简单接口的返回数据。
查看响应头:-i 与 -I 参数
1. -i:显示响应头 + 响应体
curl -i www.baidu.com
输出示例:
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:仅显示响应头
curl -I www.baidu.com
输出示例:
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
# 发送 JSON 格式的请求
curl "http://localhost:8080/api/user" -H "Content-Type: application/json"
2. 添加认证头(如 Token)
# 带 Token 认证的请求
curl "http://localhost:8080/api/data" -H "Authorization: Bearer xxxxxxxx"
3. 模拟浏览器请求(添加 User-Agent)
部分网站会拦截命令行请求,可通过修改 User-Agent 模拟浏览器:
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. 发送表单数据
# 提交表单(name 和 age 为参数)
curl "http://localhost:8080/addUser" -d "name=张三&age=20"
2. 发送 JSON 数据
结合 -H 指定 Content-Type 为 application/json:
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 请求
# 更新用户信息(PUT 方法)
curl -X PUT "http://localhost:8080/updateUser/1" \
-H "Content-Type: application/json" \
-d '{"age": 21}'
2. 发送 DELETE 请求
# 删除用户(DELETE 方法)
curl -X DELETE "http://localhost:8080/deleteUser/1"
处理 URL 参数:-G 与 --data-urlencode
1. -G:将 -d 数据转为 GET 参数
默认情况下,-d 用于 POST 数据,结合 -G 可将数据拼接为 GET 请求的查询参数:
# 等价于 GET http://localhost:8080/search?keyword=test&page=1
curl -G "http://localhost:8080/search" -d "keyword=test" -d "page=1"
2. --data-urlencode:自动编码特殊字符
当参数包含中文、空格等特殊字符时,--data-urlencode 会自动进行 URL 编码:
# 自动编码中文“张三”为 %E5%BC%A0%E4%B8%89
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. 上传单个文件
# 上传本地 test.doc 文件,表单字段名为“file”
curl "http://localhost:8080/upload" -F "file=@test.doc"
@符号表示后面是本地文件路径。
2. 同时上传文件和其他参数
# 上传文件并附带描述信息
curl "http://localhost:8080/upload" \
-F "file=@report.pdf" \
-F "description=月度报告"
其他实用参数
1. -L:自动跟随重定向
当请求返回 301/302 重定向时,-L 会自动跳转至目标 URL:
# 自动跟随重定向(如从 http 跳转到 https)
curl -L http://baidu.com
2. -o/-O:保存响应到文件
-o 文件名:指定保存的文件名# 将百度首页保存为 baidu.html curl -o baidu.html www.baidu.com-O:以 URL 中的文件名保存(需 URL 以文件名结尾)
# 保存为 image.jpg(URL 最后部分)
curl -O http://example.com/images/image.jpg
3. -s:静默模式(不显示进度和错误)
适合脚本中使用,仅输出响应内容:
# 静默获取接口数据
curl -s "http://localhost:8080/api/status"
4. -v:调试模式(显示完整请求过程)
用于排查网络问题,显示请求头、响应头、TCP 连接等细节:
curl -v www.baidu.com