【问题标题】:how to handle chunked response with curl while expecting json如何在期望 json 时使用 curl 处理分块响应
【发布时间】:2025-11-30 08:05:02
【问题描述】:

我正在发出 GET 请求并接收 json 或“二进制”数据。根据我的测试,json 响应的机会离抛硬币不远。当我收到二进制数据时,我还会得到“Content-Length:xxx”或“Transfer-Encoding:chunked”响应标头(这也是或多或少 50-50 的机会)。我没有注意到同时获取两个标题(如果我在 sn-p 下方添加 curl 的 -i 选项)。但是,我确实得到了 json 响应的“Content-Length”标头。通常 json 响应大小为 280kB,而分块响应大小约为 40kB。

curl -o output.json\
  -H "Content-Type: application/json;charset=UTF-8"\
  "www.example.com/data"\
  && ./process-output.sh

我想找到一个解决方案,在执行下一个脚本之前,我可以确保整个响应都在“output.json”中。

--编辑--

我当前的解决方案是使用file output.json | grep -c "UTF-8 Unicode" 检查输出并重试(最多 5 次)。大多数人会说这是一个丑陋的解决方法,有些人甚至可能停止与我交谈。我希望我不需要使用这样的“解决方案”。

【问题讨论】:

    标签: json curl chunked


    【解决方案1】:

    curl -N(无缓冲)能解决您的问题吗?

    我之前在将 curl 管道连接到 json 格式化程序时看到了这一点 - curl 在最后一个分块响应部分发送到 STDOUT 之前捕获 SIGPIPE 并返回成功(因此您的 shell 继续执行处理步骤)。

    【讨论】: