在前端调试、后端接口测试、服务器运维、自动化脚本编写的日常工作中,你一定见过 curl 命令。它没有华丽的可视化界面,却能称霸命令行数十年,是全球开发者公认的网络传输万能工具。
很多人只会用它简单测一下接口,却不知道它能搞定请求调试、文件上传下载、Cookie 管理、代理转发、断点续传等几乎所有网络场景。今天这篇博文,从零带你彻底搞懂 curl,看完直接告别接口调试工具!
一、curl 到底是什么?
首先纠正一个认知:curl 不只是一个命令行命令,它是一套完整的开源项目,包含两大核心部分:
- curl 命令行工具:终端直接执行的指令,用于快速发起网络请求、传输数据,无需编写代码
- libcurl 库:基于 C 语言开发的跨平台网络库,支持几乎所有编程语言对接,广泛集成在浏览器、服务器、各类软件中
简单来说,curl 是一款基于 URL 语法、跨平台、多协议的数据传输工具,主打一个:轻量化、无依赖、功能全覆盖、全平台通用。
它支持 HTTP/HTTPS、FTP、SFTP、SMTP、POP3、SCP 等二十余种网络协议,兼容 Windows、Mac、Linux、嵌入式设备等几乎所有系统,是目前互联网使用最广泛的网络传输工具之一。
二、为什么所有开发者都要会 curl?
对比 Postman、Apifox 等可视化接口工具,curl 的优势无可替代,也是它至今无法被淘汰的核心原因:
1. 零安装、全平台内置
Mac、Linux 系统原生自带 curl,Windows10 及以上版本也默认预装,无需下载客户端、无需配置环境,打开终端直接能用,服务器运维刚需。
2. 轻量化、适配脚本自动化
可视化工具只能手动点击操作,而 curl 可以嵌入 Shell、Python 等脚本,实现接口自动化测试、定时健康巡检、批量数据同步,是 CI/CD 流水线、服务器监控的核心工具。
3. 调试能力极强,精准定位网络问题
可以精准查看请求头、响应头、SSL 握手过程、重定向链路、网络耗时,能解决很多可视化工具无法发现的隐性网络问题,是排查接口超时、跨域、证书异常的利器。
4. 功能全覆盖
支持各类 HTTP 请求、Cookie 持久化、代理配置、限速下载、断点续传、身份认证、自定义请求参数,覆盖 99% 的开发网络场景。
三、基础前置:查看 curl 版本
打开终端,输入以下命令,确认环境是否可用:
curl --version
输出内容会显示版本号、支持的协议、HTTP 版本(HTTP/1.1、HTTP/2)、SSL 支持情况等信息,新版本 curl 对新协议、新特性的兼容性更好。
四、高频核心用法(实战必存)
下面整理开发中90% 场景会用到的 curl 命令,全部可直接复制使用,新手建议收藏。
1. 最简单的 GET 请求
直接访问链接,默认发起 GET 请求,终端直接打印响应内容:
curl https://www.baidu.com
2. 只查看响应头(接口调试高频)
使用 -I 参数,仅返回响应头信息,快速查看接口状态码、缓存策略、服务器信息:
curl -I https://www.baidu.com
3. 自定义请求头(-H)
模拟 Token 认证、User-Agent、Content-Type 等自定义请求头,支持多个 -H 叠加:
# 携带 Token + 指定内容类型
curl -H "Content-Type: application/json" -H "Authorization: Bearer 123456" https://httpbin.org/get
4. POST 请求(JSON 数据)
通过 -X POST 指定请求方式,-d 传递参数,JSON 请求需手动指定请求头:
curl -X POST https://httpbin.org/login \
-H "Content-Type: application/json" \
-d '{"username":"test","password":"123456"}'
5. 文件下载(两种常用方式)
方式一:-o 自定义文件名(小写 o)
curl -o test.zip https://httpbin.org/image/zip
方式二:-O 沿用远程文件名(大写 O,自动识别原文件名)
curl -O https://httpbin.org/image/zip
6. 跟随重定向
部分接口会返回 301/302 重定向,默认 curl 不会自动跳转,添加 -L 参数跟随跳转:
curl -L https://httpbin.org/redirect/2
7. 详细调试模式(超级实用)
使用 -v(verbose)参数,打印完整请求全过程:连接建立、请求头、响应头、SSL 握手、数据传输,排查接口报错神器:
curl -v https://httpbin.org/get
8. 忽略 HTTPS 证书校验
本地测试、内网 HTTPS 接口证书不合法时,用-k 参数跳过证书验证(仅测试环境使用):
curl -k https://localhost:8080
五、进阶实用场景
1. Multipart-Form 表单/文件上传(高频业务场景)
在日常开发中,文件上传、表单提交大多采用 multipart/form-data 格式,这也是 curl 高频进阶用法,常用于上传图片、文档、表单参数混合提交。无需手动设置请求头,curl 使用 -F 参数会自动生成标准的 multipart/form-data 请求头。
1、普通表单字段提交
# 提交多个表单字段,自动使用 multipart/form-data 格式
curl -F "name=测试用户" -F "age=25" https://httpbin.org/post
2、单文件上传(核心用法)
通过 @ 符号绑定本地文件路径,实现文件上传:
# 上传本地 test.png 图片文件
curl -F "file=@./test.png" https://httpbin.org/post
3、表单参数+文件混合上传
业务最常用场景,同时提交文本参数和文件资源:
curl -F "username=admin" \
-F "desc=图片上传测试" \
-F "image=@./test.png" \
https://httpbin.org/post
4、指定上传文件名
自定义服务端接收的文件名称,格式:字段名=@本地文件;filename=自定义文件名
curl -F "file=@./test.png;filename=avatar.png" https://httpbin.org/post
2. 携带 Cookie 请求
请求时携带本地 Cookie 文件,模拟登录态请求:
curl -b cookie.txt https://httpbin.org/user
响应 Cookie 保存到本地文件:
curl -c cookie.txt https://httpbin.org/login
1. 携带 Cookie 请求
请求时携带本地 Cookie 文件,模拟登录态请求:
curl -b cookie.txt https://api.example.com/user
响应 Cookie 保存到本地文件:
curl -c cookie.txt https://api.example.com/login
2. 配置代理请求
测试代理连通性、翻墙请求接口,支持 HTTP/SOCKS5 代理:
# HTTP代理
curl -x http://127.0.0.1:7890 https://httpbin.org/get
# SOCKS5代理
curl -x socks5://127.0.0.1:7890 https://httpbin.org/get
3. 限制下载速率
避免下载大文件占用全部带宽,通过 --limit-rate 限速:
# 限速 100KB/s
curl --limit-rate 100K -O https://httpbin.org/image/zip
六、新手常见坑与避坑指南
- Windows 终端引号问题:Windows CMD 中,JSON 参数建议用双引号包裹,内部引号转义,避免参数解析失败;PowerShell 兼容性更好。
- HTTPS 证书报错:生产环境禁止使用
-k参数,需配置合法 SSL 证书,仅本地调试临时使用。 - POST 请求参数为空:JSON 请求必须手动添加
Content-Type: application/json请求头,否则后端无法解析参数。 - multipart 上传误区:使用
-F时无需手动添加Content-Type请求头,手动指定会导致格式解析异常,curl 会自动生成合法的 boundary 分隔符。
七、写在最后
curl 看似是简单的命令行工具,实则是网络开发的基础核心技能。无论是日常接口调试、服务器运维、自动化脚本开发,还是排查复杂的网络异常,curl 都能高效解决问题。
相比于依赖可视化工具,熟练掌握 curl 能让你脱离客户端限制,在任何服务器、任何终端快速完成网络调试,极大提升开发和排错效率。
建议大家日常开发主动多用 curl,把常用命令熟记于心,慢慢就能体会到这款老牌工具的强大之处!
附:常用参数速记
-I:仅查看响应头-H:自定义请求头-X:指定请求方式-d:传递请求参数-L:跟随重定向-v:完整调试日志-k:跳过 HTTPS 证书校验-O/-o:文件下载