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

如何无需文件中转,用cURL将URL返回的JSON直接POST至另一URL

解决方案:无需本地文件的curl转发方法

嘿,这个问题我之前也碰到过!其实不用本地文件中转完全可以做到,而且有几种不同的方法,我给你详细说下:

方法1:命令替换(最直观)

你之前的尝试无效是因为把curl <resource_link>.json当成了字符串传给了-d参数,而不是让系统执行这个命令并把输出作为数据。正确的做法是用命令替换($())来捕获第一个curl的输出:

curl -X POST "<my_link>" -H "Content-type: application/json" -d "$(curl "<resource_link>.json")"

注意点:

  • 这里的-H是指定请求头的正确参数(你之前的命令里直接写"Content-type: application/json"是错误的,必须用-H前缀)
  • 命令替换会把第一个curl的所有标准输出(也就是JSON内容)作为第二个curl的请求体
  • 如果JSON内容特别大,命令替换可能会因为shell的参数长度限制出问题,这时候可以用下面的管道方法

方法2:管道流式传输(适合大JSON)

用管道把第一个curl的输出直接传给第二个curl,这种方法是流式的,不会把整个JSON加载到内存里,适合大文件:

curl "<resource_link>.json" | curl -X POST "<my_link>" -H "Content-type: application/json" --data-binary @-

关键说明:

  • --data-binary @-表示从标准输入(也就是管道传来的内容)读取请求体,@-是curl的特殊语法,代表标准输入
  • 用--data-binary而不是-d是因为-d会自动对内容做URL编码,可能破坏JSON的格式,--data-binary会完全保留原始内容

方法3:进程替换(内存临时文件)

如果你不想用管道或者命令替换,还可以用bash的进程替换功能,它会在内存中创建一个临时管道文件,不会写到磁盘上:

curl -X POST "<my_link>" -H "Content-type: application/json" -d @<(curl "<resource_link>.json")

解释:

  • <(curl ...)会创建一个临时的文件描述符,内容是第一个curl的输出,@告诉curl从这个文件描述符读取数据
  • 这种方法和本地文件的用法很像,但完全是在内存中操作,没有磁盘IO开销

额外提醒

  • 如果你的<resource_link>需要认证(比如Bearer token),直接在第一个curl里加对应的请求头就行,比如:curl "<resource_link>.json" -H "Authorization: Bearer your_token"
  • 可以先单独执行curl "<resource_link>.json"确认输出是有效的JSON,避免因为源数据格式问题导致POST失败
  • 如果需要调试,可以在第二个curl里加-v参数查看请求详情,方便排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:07:30