在Haskell中寻找允许将Web响应主体用作流的包

时间:2010-06-20 19:38:58

标签: http haskell hackage

来自RWH的

http://book.realworldhaskell.org/read/extended-example-web-client-programming.html

  

此处使用的HTTP库不会懒惰地读取HTTP结果。因此,在下载诸如播客之类的大文件时,可能导致大量RAM的消耗。其他库没有此限制。我们使用这个,因为它稳定,易于安装,并且相当容易使用。我们建议使用Hackage提供的mini-http,以满足严重的HTTP需求。

mini-http在hackage上已被弃用。任务很简单: 你知道任何提供和api用于执行http请求和消费响应体而不将其完全加载到内存中的软件包。

我想要的是一个api,它提供了一个可以通过迭代来转换的流。一旦简单的例子是计算响应中的字节。

也许基于iteratee的api?

2 个答案:

答案 0 :(得分:2)

您希望客户端下载文件作为流吗? download-curl's lazy interface怎么样?

可能会满足您的需求(或稍微调整一下)。

答案 1 :(得分:2)

一般来说,存在与通过验证懒散地解析某些内容相关的常见问题。当您收到包含“Content-Length”标头的HTTP响应时,您必须检查在连接关闭之前您将读取所有数据。这意味着你不能说答案是有效的,直到你读完为止。你的映射必须等待然后处理整个结果 为了避免你的库可能不那么严格,只检查标题的正确性,可能只检查数据的第一部分(如果是分块或压缩的),并返回长度小于或等于“Content-Length”的主体。或者您可以使用自己的chunk-stream返回Success或Fail作为最后一个chunk 另一种方法是牺牲你的CPU来处理响应(例如在monad中),当没有有效的数据用于下一次读取时,你将中止所有先前的计算。

我建议同时查看http-monad。从未使用它,但我希望使用monad接口实现最后一种方法。