使用 httpc lib 将大型 http 响应流式传输到 Erlang 中的磁盘

Posted

技术标签:

【中文标题】使用 httpc lib 将大型 http 响应流式传输到 Erlang 中的磁盘【英文标题】:Stream large http response to disk in Erlang with httpc lib 【发布时间】:2020-08-07 02:57:19 【问题描述】:

httpc:request(get, URL, [], [], [stream, FilePath]) 会返回 ok, saved_to_file,即使远程 Web 服务在流式传输响应时中途终止。我检查了磁盘上的内容是否丢失了一大堆数据。这是一个已知的怪癖和预期吗?

【问题讨论】:

我正在使用 OTP-22.1。我也尝试过sync, false 选项,但没有任何区别。 你可以使用cowboy_req,它对我有用。 【参考方案1】:

我提交了bug-report,OTP 团队的答复表明这是一个错误(至少对于当前的 HTTP 规范而言):

我认为这是由于客户端具有向后兼容性 与将关闭连接以指示所有数据的服务器 已经发送了。可能这应该只针对旧的 HTTP 协议的版本,或者它可能会被丢弃...... - Ingela Anderton Andin

【讨论】:

以上是关于使用 httpc lib 将大型 http 响应流式传输到 Erlang 中的磁盘的主要内容,如果未能解决你的问题,请参考以下文章

Golang的一个简单实用的http客户端库httpc

我可以使用 http2 将响应流回浏览器吗?

使用 boost::beast 处理大型 http 响应

109.大型的csv文件的处理方式

如何使用 Golang 的 net/http 包读取流响应正文?

什么是HTTP协议响应流