Postman 导入 cURL 时 body 为空,主因是 -d 参数格式不规范:单引号在 Windows cmd 中易截断、无引号触发 shell 错误、中文未转义导致解析失败,致使 JSON 被误判为 form-data 或丢弃。

Postman 能直接导入带 -d 或 --data 的 JSON 请求,但必须满足格式规范,否则会解析失败、body 为空或变成 form-data —— 这是绝大多数人卡住的第一步。
为什么粘贴后 POST 请求 body 是空的?
Postman 对 cURL 中 JSON 数据的识别高度依赖参数写法和引号嵌套。常见失效场景包括:
-
-d '{"key":"value"}'(单引号包裹)在 Windows cmd 中可能被截断,Postman 解析为纯文本而非 JSON -
-d {"key":"value"}(无引号)会被 shell 当作语法错误,Postman 收到的是不完整字符串 -
-d '{"name": "张三", "age": 25}'中中文未转义,某些旧版 Postman( - 混用
-d和-F:一旦出现-F,Postman 默认切换为 multipart/form-data,JSON 会被当作文本字段处理
解决办法:统一用双引号包裹 JSON,并对内部双引号转义 —— 即写成 -d "{\"name\":\"张三\",\"age\":25}"。这是跨平台最稳的写法。
如何从浏览器 Network 面板复制出可用的 JSON cURL?
Chrome / Edge / Firefox 的「Copy as cURL」默认生成的是带完整 headers 和正确引号的命令,但有两个隐藏陷阱:
- 如果原始请求是通过
fetch发送的 JSON,且 header 中含Content-Type: application/json,复制出的 cURL 通常没问题 - 如果页面用了 Axios 或封装库,且手动设置了
transformRequest,复制出的 cURL 可能漏掉-H "Content-Type: application/json",导致 Postman 不识别 body 为 JSON - 部分前端框架(如 Next.js App Router)会在 dev 模式下注入调试 header(如
x-nextjs-cache),这些 header 不影响发送,但会干扰 Postman 的自动解析逻辑
实操建议:复制后先检查是否有 -H "Content-Type: application/json";没有就手动补上,再粘贴导入。不要跳过这一步。
导入后 Body 显示 raw 但内容不对?检查 Content-Type 和 encoding
即使 cURL 导入成功,Postman 也可能把 JSON 当成 text/plain 或 application/x-www-form-urlencoded。关键看右上角 Body 类型下拉框:
- 如果显示
raw但右侧下拉选的是Text,JSON 不会高亮,也无法被后端正确解析 - 必须手动切换为
JSON(不是Raw+ 手动选 type,而是下拉菜单里明确点选JSON) - 若 JSON 含中文,确保顶部编码是
UTF-8(Postman v10+ 默认启用,但老版本需在 Settings → General → “Use UTF-8 encoding for raw request bodies” 勾选)
一个快速验证方式:导入后点击右上角 Code → 选 cURL,再复制出来对比原始命令 —— 如果新生成的 cURL 里 -d 内容变了形(比如引号消失、中文变 \uXXXX),说明编码或类型设置没到位。
真正容易被忽略的点是:Postman 导入 cURL 时不会校验 JSON 语法合法性,哪怕 -d "{name:"abc"}" 这种明显缺引号的错也能“成功”导入,但发出去的请求 body 就是非法字符串。所以,导入后务必点开 Body 标签页,确认 JSON 高亮正常、无红色波浪线,再点 Send。


















