You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确通过curl POST请求提交超长JSON内容?

错误原因排查

  • 方案1报错原因:
    1. Shell变量赋值不允许存在空格,tempfile = test.txt的写法会被Shell识别为执行tempfile命令,而非赋值变量;
    2. curl的@语法是给请求参数指定读取文件的标识,不能直接把整段curl参数存入文件后用curl @文件名调用,这种写法会让curl把文件名当成请求的主机地址解析,自然会报无法解析主机的错误。
  • 方案2报错原因:
    只有--data/--data-binary这类参数支持@前缀读取文件/标准输入,--data-raw会把所有传入内容当成普通字符串传输,你传的@-会直接被发送到服务端,JSON解析时碰到开头的@自然会报错。

正确解决方案

优先选择把超长JSON内容单独存入文件的方案,既不会触发Shell命令行长度限制,也能避免JSON内特殊字符被Shell转义出错:

方案A:JSON内容存单独文件

假设JSON内容存在data.json文件中,直接用--data-binary读取文件即可:

#!/bin/bash
curl --location --request POST 'example.com/abcxyz' \
--header 'Content-Type: application/json' \
--header 'Cookie: my_secret_key' \
--data-binary '@data.json'

方案B:从标准输入传入超长JSON

如果不想存本地文件,也可以通过管道或者here string把内容传给--data-binary '@-':

# 管道传参示例
echo '你的超长JSON内容' | curl --location --request POST 'example.com/abcxyz' \
--header 'Content-Type: application/json' \
--header 'Cookie: my_secret_key' \
--data-binary '@-'

# here string传参示例
curl --location --request POST 'example.com/abcxyz' \
--header 'Content-Type: application/json' \
--header 'Cookie: my_secret_key' \
--data-binary '@-' <<< '你的超长JSON内容'

方案C:curl参数全放配置文件

如果连curl参数都需要统一存在文件管理,使用curl自带的-K/--config参数读取配置文件即可:

  1. 新建curl.conf配置文件,内容如下:
location
request = POST
url = "example.com/abcxyz"
header = "Content-Type: application/json"
header = "Cookie: my_secret_key"
data-binary = "@data.json"
  1. 执行请求:
curl -K curl.conf

你之前短JSON能正常运行是因为短字符串没有超过Shell的命令行参数长度限制,一旦内容超长就会触发异常,上述方案都可以彻底规避长度限制问题。

内容的提问来源于stack exchange,提问作者mamatv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:27:05