cURL 命令生成器与构建工具
在浏览器中构建 curl 命令——设置请求方法、请求头、认证与请求体,即刻获得可复制的命令。支持 Bearer、POST JSON、文件上传预设。免费、隐私安全、无需注册。
什么是 curl 命令?
curl 是一个用于通过 HTTP 及数十种其他协议传输数据的命令行工具。一条 curl 命令由二进制名称、一组标志和一个 URL 组成——例如 `curl -X POST https://api.example.com/users -H 'Content-Type: application/json' -d '{"name":"Ada"}'`。由于 curl 几乎在所有 Linux、macOS 和现代 Windows 机器上都预装,它是测试 API、从文档重现请求或在 CI 脚本中对服务进行健康检查的通用方式。curl 的简洁让它功能强大,但也让命令难以记忆,这正是可视化构建器的用武之地。
每条 curl 命令的结构相同。方法(`-X GET`、`-X POST` 等)设置 HTTP 动词,默认为 GET。URL 是端点,查询参数追加在 `?` 之后。请求头(`-H 'Key: Value'`,可重复)携带 `Accept`、`Content-Type` 等元数据。认证只是特殊的请求头——令牌使用 `-H 'Authorization: Bearer …'`,Basic 认证使用 `-u user:pass`,自定义密钥使用 `-H 'X-API-Key: …'`。请求体(原始数据或表单数据用 `-d`,multipart 和文件上传用 `-F`)携带载荷。最后,选项标志如 `-L`(跟随重定向)、`-i`(包含响应头)和 `-v`(详细模式)控制行为。此工具将每个部分以表单字段的形式呈现,并实时重建命令。
当您面临引号处理困难、在 JSON POST 时忘记 `Content-Type` 请求头,或手动组装 multipart 上传时,请使用 curl 命令生成器。构建器会正确处理 Shell 安全的单引号转义、编码查询字符串,并为每种请求体类型附加正确的请求头——然后您得到一条可以信赖的命令。如需包含 40 多个可运行示例的详尽标志参考,请阅读配套的 curl 速查表;要编码复杂的查询字符串值,可使用我们的 URL 编码器。
一切在您的浏览器中完成。您的令牌、凭据、URL 和请求体通过客户端 JavaScript 组装,从不发送到任何地方——因此您可以针对真实的生产端点和真实的 API 密钥构建命令,数据不会离开您的设备。
# Plain GET — curl defaults to GET
curl https://api.example.com/users
# GET with a Bearer token (auth is just a header)
curl https://api.example.com/me \
-H 'Authorization: Bearer YOUR_TOKEN'
# POST a JSON body — note the Content-Type header
curl -X POST https://api.example.com/users \
-H 'Content-Type: application/json' \
-d '{"name":"Ada","role":"admin"}'
# Multipart file upload — '@' reads the file from disk
curl -X POST https://api.example.com/upload \
-F 'file=@report.pdf' \
-F 'title=Q3 report' 核心功能
可视化请求构建器
以表单字段形式展示整个请求——方法、URL、查询参数、请求头、认证、请求体和选项——而无需记忆标志顺序和引号规则。再也不用猜测 URL 应该在 `-d` 之前还是之后。
实时命令,支持复制与导出
每次按键都会在页面底部实时重建 curl 命令。一键复制到剪贴板,或导出为 .sh 文件下载可运行的 Shell 脚本,可直接放入代码库或 CI 任务。
完整的认证支持
支持 Bearer 令牌、Basic 认证(`-u user:pass`)和自定义 API 密钥请求头,均以服务器期望的精确格式生成。选择认证方案,粘贴凭据,即可生成正确的 `Authorization` 或自定义请求头。
支持所有请求体类型
支持原始 JSON(自动添加对应的 `Content-Type` 请求头)、`application/x-www-form-urlencoded` 表单字段,以及 `multipart/form-data` 上传(任意字段均可通过 `@` 前缀切换为文件)。
六个一键预设
GET with Bearer、POST JSON、表单上传、Basic 认证、下载 `-o` 和详细调试,一键填充整个表单。从最常见 API 任务的可用请求出发,按需调整。
多行与单行输出切换
在紧凑的单行命令(便于快速粘贴)与反斜杠续行的多行版本(便于在脚本中阅读或在 Pull Request 中审查)之间切换。同一命令,两种形式。
100% 基于浏览器的隐私保护
令牌、URL、请求头和请求体完全在客户端组装,从不离开您的设备——可在"网络"标签页中验证。对生产端点和真实凭据安全,零数据泄露。
专为开发工具工作流设计
围绕测试 API 和从浏览器开发工具"Copy as cURL"重现请求的日常循环而设计。下一版本将推出"转换"标签页,可将粘贴的 curl 命令解析为 fetch、requests、Go、PHP、Ruby 和 Node.js。
curl 替代工具与 HTTP 客户端
HTTPie
命令行工具,人性化语法具有彩色输出和更简洁语法的现代 CLI(`http POST api.example.com/users name=Ada`)。默认设置 JSON `Content-Type`。对于交互式使用更友好;curl 在普及度和脚本可移植性上更胜一筹。
wget
命令行工具,专注下载最适合递归下载和镜像站点;默认跟随重定向和重试。在任意方法、自定义请求头和 API 测试方面弱于 curl。在 Linux 上通常与 curl 一起预装。
Postman
图形界面应用一个完整的图形界面工具,可构建、保存和共享请求,支持集合、环境和团队同步。非常适合探索性 API 工作;可导入/导出 curl。对于快速检查或 CI 而言比单行命令更重。
Insomnia
图形界面应用Postman 的轻量级开源替代品,拥有简洁的请求构建器和 curl 导入/导出功能。适合组织 API 请求;与 Postman 一样,对于单个脚本化调用来说功能过多。
fetch() / requests
代码内置 HTTP 客户端JavaScript 的 `fetch()` 和 Python 的 `requests` 是在应用代码中发起请求的方式。先以 curl 构建并验证请求,然后进行转换——即将推出的"转换"标签页将生成等效的 fetch、requests 和其他客户端代码。
curl 命令示例
基本 GET 请求
curl https://api.example.com/users
不指定方法标志时,curl 默认使用 GET。这是最简单的请求——获取资源并将响应体打印到终端。在构建器中添加查询参数,它们会自动进行 URL 编码并追加到末尾(如 `?page=2&limit=50`)。
携带 Bearer 令牌的 GET
curl https://api.example.com/me \ -H 'Authorization: Bearer YOUR_TOKEN'
针对 REST API 最常见的认证调用。Bearer 认证预设会自动为您添加 `Authorization: Bearer …` 请求头。在发送令牌前,可将其粘贴到我们的 JWT 解码器中查看内部声明。
POST JSON 请求体
curl -X POST https://api.example.com/users \
-H 'Content-Type: application/json' \
-d '{"name":"Ada","role":"admin"}' curl POST 请求生成器的标准用法:JSON 请求体类型设置 `-X POST`,附加 `Content-Type: application/json` 请求头,并通过 `-d` 传递载荷。可使用我们的 JSON 格式化工具对乱序的 API 响应进行美化。
POST 表单(urlencoded)
curl -X POST https://api.example.com/login \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'username=ada&password=s3cret'
经典的 HTML 表单提交。每个 `-d field=value` 键值对以 `&` 连接,以 `application/x-www-form-urlencoded` 格式发送。curl 会对保留字符进行 URL 编码;在表单请求体区域构建各字段,工具会自动组装字符串。
Multipart 文件上传
curl -X POST https://api.example.com/upload \ -F 'file=@report.pdf' \ -F 'title=Q3 report'
curl 文件上传命令使用 `-F` 标志处理 `multipart/form-data`。在值前加 `@` 前缀可从磁盘附加文件;可在同一请求中自由混合文件字段和文本字段。curl 会自动设置 multipart 边界和 `Content-Type`——切勿手动设置。
下载到文件
curl -L -o archive.zip \ https://example.com/files/archive.zip
使用 `-o` 将响应体保存到指定文件,`-L` 跟随重定向到真实的下载 URL(CDN 和发布资源链接常见此情况)。可用 `-O` 代替 `-o` 以保留服务器的文件名。
Basic 认证
curl -u ada:s3cret \ https://api.example.com/private
curl Basic 认证使用 `-u user:pass`;curl 会将凭据 Base64 编码后放入 `Authorization: Basic …` 请求头中传输。请务必通过 HTTPS 发送 Basic 认证——Base64 是编码而非加密,可被轻易还原。
详细调试模式
curl -v -i https://api.example.com/health
当请求出现异常时,`-v` 会打印完整的请求行、所有发送和接收的请求头以及 TLS 握手过程;`-i` 在响应体中包含响应头。这是 API 返回错误状态码时的首要排查手段。
如何构建 curl 命令
- 1
选择 HTTP 方法
选择 GET、POST、PUT、PATCH、DELETE、HEAD 或 OPTIONS。curl 默认为 GET;选择 POST 或其他动词会在生成的命令中添加 `-X METHOD`。或点击预设芯片,一键设置方法和匹配的请求体。
- 2
输入 URL 和查询参数
输入请求 URL(如 `https://api.example.com/users`)。以键值对形式添加查询参数,工具会自动进行 URL 编码并将 `?key=value&…` 追加到 URL——无需手动编码。
- 3
添加请求头和认证
以键值对形式添加请求头,然后选择认证方案:无、Bearer 令牌、Basic(用户名/密码)或自定义 API 密钥请求头。以服务器期望的精确格式生成正确的 `Authorization` 或自定义请求头。
- 4
设置请求体
对于 POST/PUT/PATCH,选择请求体类型:粘贴原始 JSON(自动为您添加 `Content-Type` 请求头)、构建 urlencoded 表单字段,或组装 multipart 上传并通过 `@` 前缀将任意字段切换为文件。
- 5
切换选项
按需开启所需标志——跟随重定向(`-L`)、不安全 TLS(`-k`)、详细模式(`-v`)、包含响应头(`-i`)、压缩(`--compressed`)、输出到文件(`-o`)、连接超时或代理(`-x`)。每次切换都会实时更新命令。
- 6
复制、导出或重置
复制已完成的命令,导出为 .sh 脚本下载,或重置以清空表单。复制前可使用多行切换在单行和反斜杠续行输出之间切换。
常见 curl 错误
有请求体时遗漏 -X 方法标志
使用 `-d` 发送请求体时,默认使用 POST,但如果需要 PUT 或 PATCH,必须使用 `-X` 显式指定。遗忘此标志会导致请求体以 POST 方式发送,服务器返回错误状态码或拒绝请求。
# Intended a PATCH, but -d alone implies POST
curl -d '{"role":"admin"}' \
https://api.example.com/users/7 # Set the verb explicitly
curl -X PATCH -d '{"role":"admin"}' \
-H 'Content-Type: application/json' \
https://api.example.com/users/7 JSON POST 请求缺少 Content-Type
使用 `-d` 发送 JSON 时,curl 不会自动设置 `Content-Type` 请求头——默认使用 `application/x-www-form-urlencoded`。大多数 API 因此无法解析请求体,返回 400 或 415 错误。请务必附加 JSON Content-Type(或使用 JSON 请求体预设,它会自动添加)。
# Server sees urlencoded, not JSON — 400/415
curl -X POST https://api.example.com/users \
-d '{"name":"Ada"}' # Declare the JSON content type
curl -X POST https://api.example.com/users \
-H 'Content-Type: application/json' \
-d '{"name":"Ada"}' 单引号与双引号转义混淆
在双引号中,Shell 会展开 `$`、反引号和 `!`,可能破坏 JSON 或处理载荷中的 `$variable` 时出错。单引号会按字面传递请求体。对于 JSON 请求体请使用单引号;仅在 `cmd.exe`(不支持单引号)时才切换为双引号。
# $name gets expanded by the shell to empty string
curl -d "{\"user\":\"$name\"}" \
https://api.example.com/users # Single quotes send the body literally
curl -d '{"user":"$name"}' \
https://api.example.com/users 在 GET 请求中使用 -d
添加 `-d` 会静默地将请求转换为 POST。如果您需要携带查询参数的 GET 请求,请将参数放在 URL 中(或使用 `-G` 将 `-d` 数据折叠到查询字符串中)。在 GET 请求上使用 `-d` 是"GET 请求不工作"最常见的原因之一。
# -d makes this a POST, not a GET curl -d 'page=2&limit=50' \ https://api.example.com/users
# Query string on the URL keeps it a GET curl 'https://api.example.com/users?page=2&limit=50'
Windows 续行符:^ 与 \
反斜杠(`\`)在 bash、Git Bash 和 WSL 中用于续行。在 `cmd.exe` 中,续行符是脱字符(`^`),PowerShell 使用反引号(`` ` ``)。将反斜杠续行的命令粘贴到 `cmd` 中会导致出错——对于 Windows `cmd`,请将工具切换为单行输出。
:: cmd.exe — backslash is not a continuation char
curl -X POST https://api.example.com/users \
-d '{"name":"Ada"}' :: cmd.exe — one line, or use ^ to continue
curl -X POST https://api.example.com/users -d "{\"name\":\"Ada\"}" URL 中的空格未编码
URL 或查询值中的原始空格(以及 `&`、`#`、`?`)会破坏命令——Shell 会分割参数,curl 看到的是截断的 URL。请对值进行百分比编码(空格变为 `%20`)或使用 curl 的 `--data-urlencode` 处理编码。此工具的查询参数字段会自动编码。
# Space splits the argument — curl sees two args curl https://api.example.com/search?q=hello world
# Encode the space (or quote the whole URL) curl 'https://api.example.com/search?q=hello%20world'
常见使用场景
- REST API 测试
- 无需离开终端,直接针对 REST 端点构建并发送请求:设置方法、粘贴 Bearer 令牌、发送 JSON 请求体,读取响应。在编写客户端代码之前,这是确认 API 行为的最快方式。
- 从文档重现请求
- API 文档展示端点和参数,但很少提供完整的可直接运行的命令。在此填写方法、URL、请求头和认证,即可获得可直接运行的 curl 命令——不再为引号规则或缺少 `Content-Type` 请求头而烦恼。
- CI/CD 冒烟测试脚本
- 为健康检查或部署后冒烟测试生成 curl 命令,然后导出为 .sh 文件放入流水线。添加 `--connect-timeout` 和 `--max-time` 以防止挂起的端点阻塞构建,并使用 `-w` 检查状态码。
- 文件上传与下载
- 组装带有 `-F field=@file` 的 `multipart/form-data` 上传,或构建跟随重定向到 CDN 的 `-L -o filename` 下载。对于复杂的文件名或查询值,可先使用我们的 URL 编码器 进行编码。
- Webhook 调试
- 通过 POST 提供商发送的相同 JSON 请求体(含正确的签名和 `Content-Type` 请求头)来重放 Webhook 载荷。在本地重现确切的请求,以调试处理程序拒绝的原因。
- 可复现的 Bug 报告
- 在 Bug 报告或 PR 中粘贴一条自包含的 curl 命令,任何人都可以重现确切的请求——包含方法、请求头、认证占位符和请求体。远比用文字描述请求清晰。
- 学习 curl 标志
- 观察每个表单选项如何映射到真实的标志——选择 Basic 认证时看 `-u` 出现,添加 JSON 请求体时看 `Content-Type` 请求头自动附加。一种直观学习语法的方式,配合我们的 curl 速查表 使用效果更佳。
- 为代码转换准备请求
- 先以 curl 构建并验证请求,然后将其转换为应用程序的 HTTP 客户端代码。即将推出的"转换"标签页将把粘贴的 curl 命令转换为 fetch、requests、Go、PHP、Ruby 和 Node.js——从一条已知有效的 curl 命令开始。
curl 标志与语法参考
- Shell 引号与转义
- 工具使用单引号包裹值,这是 POSIX Shell 中最安全的形式,因为单引号字符串内的任何内容都不会被展开。值中的字面单引号以 `'\''` 序列输出(关闭引号、转义引号、重新开启引号)。在 `cmd.exe` 中请切换为双引号;Git Bash 和 WSL 可直接运行生成的单引号命令,无需修改。
- -d 与 --data-raw 与 --data-binary
- `-d`/`--data` 发送请求体时会去除换行符和回车符——对于 `key=value` 键值对没问题,但对于多行内容会造成损失。`--data-raw` 与之相同,但不会将开头的 `@` 视为文件名。`--data-binary` 完全按原样发送字节(使用 `@file` 上传原始文件内容)。这三者均默认使用 POST,除非覆盖方法。
- Multipart(-F)与 URL 编码(-d)
- `-F field=value` 生成带有自动边界的 `multipart/form-data`——文件上传(`-F file=@path`)和混合文件/文本表单必须使用此方式。`-d field=value` 生成 `application/x-www-form-urlencoded`,即以 `&` 连接的单个字符串。对于 multipart,切勿手动设置 `Content-Type`;curl 会自行计算边界并设置请求头。
- 认证请求头编码
- Bearer 认证按原样发送 `Authorization: Bearer
`(RFC 6750)。通过 `-u user:pass` 的 Basic 认证会将凭据 Base64 编码后放入 `Authorization: Basic ` 中传输——这是编码而非加密,请务必使用 HTTPS。API 密钥则是服务要求的任意自定义请求头,例如 `X-API-Key: `。 - 查询字符串编码
- 构建器中添加的查询参数会进行百分比编码,并以 `?key=value&key2=value2` 的形式追加。保留字符(空格、`&`、`=`、`#`)会被转义以确保 URL 有效。对于必须编码的请求体字段,curl 自带的 `--data-urlencode` 可在请求时处理编码。
- 重定向行为(-L)
- 不带 `-L` 时,curl 打印 301/302 响应后停止。带 `-L` 时,它会跟随 `Location` 请求头到最终 URL。注意:当重定向跨越不同主机时,curl 会丢弃 `Authorization` 请求头(这是安全默认行为);仅在充分了解其影响的情况下才使用 `--location-trusted`。
- 压缩响应
- `--compressed` 添加 `Accept-Encoding` 请求头,声明支持 gzip/deflate/brotli,并透明地解压响应,节省带宽。解码后的响应体与未压缩请求完全相同——这纯粹是传输优化,在大多数 API 调用中可安全启用。
- 输出:-o 与 -O
- `-o filename` 将响应体写入您命名的文件;`-O` 使用 URL 路径中的远程文件名保存。两者均会抑制正常的标准输出。与 `-L` 结合使用,可在写入文件前将重定向解析到真实资源。
curl 请求最佳实践
- 切勿在共享命令中硬编码密钥
- 粘贴到 PR、工单或聊天中的 curl 命令会被他人看到并被工具索引。请将令牌和密码替换为占位符(`YOUR_TOKEN`)或引用环境变量(`-H "Authorization: Bearer $API_TOKEN"`)。对于长凭据,curl 可通过 `-H @headerfile` 从文件读取请求头,这样密钥就不会出现在 Shell 历史记录中。
- 对二进制载荷优先使用 --data-binary @file
- 当请求体是字节内容重要的文件时——图片、已签名的载荷、空白字符有意义的 JSON——请使用 `--data-binary @file` 而非 `-d @file`。普通的 `-d` 会去除换行符和回车符,静默地破坏二进制和多行内容。`--data-binary` 会按磁盘上的原样发送文件。
- 为请求头值加引号
- 始终用引号包裹 `-H` 的值:`-H 'Content-Type: application/json'`。不加引号时,冒号后的空格会分割参数,curl 会看到格式错误的请求头。单引号还可以防止 Shell 展开值中的 `$`、`*` 和其他特殊字符——这正是此工具默认生成的格式。
- 使用 --compressed 节省带宽
- 在 API 调用和下载中添加 `--compressed`,以请求 gzip/brotli 编码并让 curl 透明解压。对于 JSON 密集型 API,这可以将传输大小减少 70–90%,而您看到的响应不变——对于频繁轮询端点的脚本来说是免费的性能提升。
- 在脚本中设置超时
- 在任何自动化上下文中,添加 `--connect-timeout` 和 `--max-time`,防止缓慢或挂起的端点永久阻塞流水线。带有 `--max-time 10` 的健康检查可快速失败并让 CI 继续运行。与 `--retry N` 配合使用,以应对瞬时网络抖动而无需立即放弃。
- 自动化前先用 -v 验证
- 在将 curl 命令放入脚本或定时任务之前,先带 `-v` 运行一次,查看确切的请求行、请求头和 TLS 握手。这是发现错误方法、缺少 `Content-Type` 或认证请求头未附加的最快方式——交互式调试,然后在生产中移除 `-v`。
常见问题
这个工具的功能是什么?
我的数据(令牌、URL)会被上传吗?
如何在 curl 中发送带有 JSON 的 POST 请求?
如何在 curl 请求中添加 Bearer 令牌?
如何使用 curl 上传文件?
能否导入从浏览器开发工具复制的命令("Copy as cURL")?
curl 在 Windows 上有何不同?
-d、--data-raw 和 --data-binary 有什么区别?
如何用 curl 发送 Cookie?
如何跟随重定向?
如何设置请求超时?
相关工具
查看所有工具 →进制转换器 — 二进制、十六进制、十进制、八进制互转
转换工具
在线免费进制转换工具,支持二进制、八进制、十进制、十六进制及 2-36 任意进制互转。无需注册,数据不离开浏览器,即时获取结果。
Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
大小写转换器 — UPPERCASE、lowercase、camelCase 一次搞定
文本处理
在浏览器里把文本一键转成 UPPERCASE、lowercase、Title Case、Sentence case、camelCase、PascalCase、snake_case、kebab-case、CONSTANT_CASE 等共 15 种命名格式。免费、纯本地、无需注册。
颜色转换器 — HEX、RGB、HSL 与 OKLCH
转换工具
在浏览器中将 HEX 转 RGB、HSL、OKLCH、OKLAB 与 CMYK,一键复制任意格式。免费、免注册,您的颜色永远不会离开本页。
Crontab 生成器与 Cron 表达式构建工具
日期和时间
在浏览器里构建、校验并解读 cron 表达式,按本地时间或 UTC 实时预览下一次运行。支持 POSIX 五字段语法、常用预设和中文描述。免费、隐私、无需注册。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。