如何在期望 json 的情况下使用curl处理分块响应

Vad*_*Vad 2 json curl chunked

我正在发出 GET 请求并接收 json 或“二进制”数据。根据我的测试,json 响应的机会与抛硬币相差不远。当我收到二进制数据时,我还会收到“Content-Length: xxx”或“Transfer-Encoding: chunked”响应标头(这也或多或少有 50-50 的机会)。我没有注意到同时获取两个标头(如果我在下面的代码片段中为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
Run Code Online (Sandbox Code Playgroud)

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

- 编辑 -

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

小智 9

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

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