curl 命令详解与实战:请求调试、文件下载、接口测试,一个命令全搞定


curl 是 Linux 和类 Unix 系统里最强大的命令行工具之一,常被用来测试接口、下载文件、调试请求。几乎所有后端开发和运维都会用到它:"帮我 curl 一下这个接口"。但很多人只会 curl http://xxx,遇到带请求头、POST 数据、上传文件、cookie 会话就不知道怎么写了。这篇文章把 curl 的常用场景一次讲清,从入门到实战,让你真正用好 curl。

一、curl 是什么

curl(Client URL)是一个基于命令行的网络请求工具,支持 HTTP、HTTPS、FTP 等几十种协议。它和 wget 的区别:curl 更侧重接口调试和请求测试,wget 更侧重文件下载。做后端开发、调试接口,curl 是标配。

安装:

# Ubuntu / Debian
apt install -y curl

# CentOS / Rocky
yum install -y curl

二、基础用法

1. 发送 GET 请求

curl https://example.com

2. 显示详细响应头

curl -i https://example.com        # 包含响应头
curl -I https://example.com        # 只显示响应头

3. 静默输出并显示状态码(常用)

curl -s -o /dev/null -w "%{http_code}\n" https://example.com
# 输出 200,表示请求成功

-o /dev/null 丢弃响应体,-w 自定义输出格式,经常用来快速判断网站是否正常。

三、POST 请求与提交数据

1. 提交表单数据

curl -X POST https://example.com/login \
  -d "username=admin&password=123456"

2. 提交 JSON 数据

curl -X POST https://example.com/api/user \
  -H "Content-Type: application/json" \
  -d '{"name":"zhangsan","age":25}'

3. 带请求头

curl https://api.example.com/user \
  -H "Authorization: Bearer 你的Token" \
  -H "Accept: application/json"

四、文件下载与上传

1. 下载文件

# 用 -o 指定保存文件名
curl -o file.zip https://example.com/file.zip

# 跟随重定向下载(很多下载链接会跳转)
curl -L -o file.zip https://example.com/download

# 断点续传
curl -C - -o file.zip https://example.com/file.zip

2. 模拟浏览器 User-Agent

有的网站会拦截 curl 的默认 UA:

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://example.com

3. 上传文件

curl -X POST https://example.com/upload \
  -F "file=@/path/to/photo.jpg" \
  -F "note=封面图"

-F "file=@本地路径" 是 multipart 文件上传的标准写法。

五、cookie 会话

测试需要登录的接口时,需要携带 cookie:

# 先登录,把 cookie 存到文件
curl -c cookies.txt -X POST https://example.com/login -d "user=admin&pass=123"

# 之后的请求带上 cookie
curl -b cookies.txt https://example.com/private

-c 保存 cookie,-b 发送 cookie,这是模拟登录态的核心。

六、HTTPS 与证书

1. 跳过证书校验(测试时用,注意安全)

curl -k https://self-signed.example.com

2. 指定客户端证书

curl --cert client.pem --key client.key https://secure.example.com

七、复杂场景实战

场景一:批量检查多个网站是否正常

for url in $(cat urls.txt); do
  code=$(curl -s -o /dev/null -w "%{http_code}" -L "$url")
  echo "$url -> $code"
done

场景二:测接口接口响应时间

curl -o /dev/null -s -w "连接:%{time_connect}s\n首字节:%{time_starttransfer}s\n总耗时:%{time_total}s\n" https://example.com

场景三:配合 jq 解析返回的 JSON

curl -s https://api.example.com/user.json | jq '.data.name'

八、在服务器运维中的应用

服务器排障时,curl 是不可或缺的工具:

# 检查本地网站是否正常(绕过域名直达内网)
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/

# 指定 Host 头测试虚拟主机
curl -H "Host: example.com" http://127.0.0.1/

# 指定 IP 访问(DNS 解析异常时排查)
curl --resolve example.com:443:1.2.3.4 https://example.com

配合 nginx 访问日志,用 curl 快速判断是网站自身问题还是网络/DNS 问题。

九、常见问题

Q1:提示 Could not resolve host?

DNS 解析失败,域名不存在或 DNS 没配好。检查网络和 /etc/resolv.conf。

Q2:提示 SSL certificate problem?

证书校验失败。若是自签证书可用 -k,生产环境请排查证书是否正确。

Q3:返回 403 Forbidden?

网站拒绝访问,可能是 UA 被拦、IP 被限、需要登录。加上 -A "Mozilla/5.0..." 或 cookie 试试。

Q4:下载到一半断了?

用 -C - 断点续传,或改用 wget(专门优化下载)。

总结

curl 核心就掌握几组参数:-X 指定方法、-d 提交数据、-H 加请求头、-o 保存文件、-F 上传文件、-c/-b 管理 cookie、-w 自定义输出。把这些记熟,调试接口、排障服务器、下载文件都不在话下。配合本站的 wget、Nginx 和运维系列教程,你就能成为命令行高手。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

磁盘 IO 慢排查与优化指南:iostat、hdparm 定位瓶颈,让磁盘不再拖后腿

Zsh 安装与 Oh My Zsh 配置教程:补全、高亮、主题美化,终端效率翻倍

评 论
更换验证码