0%

URL访问工具

curl 命令详解:命令行下的 HTTP 访问利器

curl 是一款功能强大的命令行工具,支持 HTTP、HTTPS、FTP 等多种协议,可用于发送 HTTP 请求、获取网页内容、调试接口等。本文将详细介绍 curl 的核心用法和常用参数,帮助你高效在命令行中进行网络交互。

基础用法:发起简单请求

1. 发送 GET 请求(默认)

直接指定 URL 即可发送 GET 请求,返回响应体内容:

1
2
# 获取百度首页内容
curl www.baidu.com

输出结果为网页的 HTML 源代码,适合快速查看简单接口的返回数据。

查看响应头:-i-I 参数

1. -i:显示响应头 + 响应体

1
curl -i www.baidu.com

输出示例:

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
curl -I www.baidu.com

输出示例:

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
# 发送 JSON 格式的请求
curl "http://localhost:8080/api/user" -H "Content-Type: application/json"

2. 添加认证头(如 Token)

1
2
# 带 Token 认证的请求
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
# 提交表单(name 和 age 为参数)
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
# 更新用户信息(PUT 方法)
curl -X PUT "http://localhost:8080/updateUser/1" \
-H "Content-Type: application/json" \
-d '{"age": 21}'

2. 发送 DELETE 请求

1
2
# 删除用户(DELETE 方法)
curl -X DELETE "http://localhost:8080/deleteUser/1"

处理 URL 参数:-G--data-urlencode

1. -G:将 -d 数据转为 GET 参数

默认情况下,-d 用于 POST 数据,结合 -G 可将数据拼接为 GET 请求的查询参数:

1
2
# 等价于 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 编码:

1
2
# 自动编码中文“张三”为 %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. 上传单个文件

1
2
# 上传本地 test.doc 文件,表单字段名为“file”
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
# 自动跟随重定向(如从 http 跳转到 https)
curl -L http://baidu.com

2. -o/-O:保存响应到文件

  • -o 文件名:指定保存的文件名

    1
    2
    # 将百度首页保存为 baidu.html
    curl -o baidu.html www.baidu.com
  • -O:以 URL 中的文件名保存(需 URL 以文件名结尾)

1
2
  # 保存为 image.jpg(URL 最后部分)
curl -O http://example.com/images/image.jpg

3. -s:静默模式(不显示进度和错误)

适合脚本中使用,仅输出响应内容:

1
2
# 静默获取接口数据
curl -s "http://localhost:8080/api/status"

4. -v:调试模式(显示完整请求过程)

用于排查网络问题,显示请求头、响应头、TCP 连接等细节:

1
curl -v www.baidu.com

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10