开发者必备神器:一文吃透 curl,从入门到实战

14次阅读
没有评论

在前端调试、后端接口测试、服务器运维、自动化脚本编写的日常工作中,你一定见过 curl 命令。它没有华丽的可视化界面,却能称霸命令行数十年,是全球开发者公认的网络传输万能工具

很多人只会用它简单测一下接口,却不知道它能搞定请求调试、文件上传下载、Cookie 管理、代理转发、断点续传等几乎所有网络场景。今天这篇博文,从零带你彻底搞懂 curl,看完直接告别接口调试工具!

一、curl 到底是什么?

首先纠正一个认知:curl 不只是一个命令行命令,它是一套完整的开源项目,包含两大核心部分:

  1. curl 命令行工具:终端直接执行的指令,用于快速发起网络请求、传输数据,无需编写代码
  2. 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

六、新手常见坑与避坑指南

  1. Windows 终端引号问题:Windows CMD 中,JSON 参数建议用双引号包裹,内部引号转义,避免参数解析失败;PowerShell 兼容性更好。
  2. HTTPS 证书报错:生产环境禁止使用 -k 参数,需配置合法 SSL 证书,仅本地调试临时使用。
  3. POST 请求参数为空:JSON 请求必须手动添加 Content-Type: application/json 请求头,否则后端无法解析参数。
  4. multipart 上传误区:使用 -F时无需手动添加 Content-Type 请求头,手动指定会导致格式解析异常,curl 会自动生成合法的 boundary 分隔符。

七、写在最后

curl 看似是简单的命令行工具,实则是网络开发的基础核心技能。无论是日常接口调试、服务器运维、自动化脚本开发,还是排查复杂的网络异常,curl 都能高效解决问题。

相比于依赖可视化工具,熟练掌握 curl 能让你脱离客户端限制,在任何服务器、任何终端快速完成网络调试,极大提升开发和排错效率。

建议大家日常开发主动多用 curl,把常用命令熟记于心,慢慢就能体会到这款老牌工具的强大之处!

附:常用参数速记

  • -I:仅查看响应头
  • -H:自定义请求头
  • -X:指定请求方式
  • -d:传递请求参数
  • -L:跟随重定向
  • -v:完整调试日志
  • -k:跳过 HTTPS 证书校验
  • -O/-o:文件下载
正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码