haskell - 在 Haskell 中从互联网下载大文件

标签 haskell networking http-conduit

关于如何在 Haskell 中下载大文件有什么建议吗?我认为 Http.Conduit 是一个很好的库。然而,它如何解决这个问题呢?它的文档中有一个示例,但它不适合下载文件,它只是下载一个文件:

 import Data.Conduit.Binary (sinkFile)
 import Network.HTTP.Conduit
 import qualified Data.Conduit as C

 main :: IO ()
 main = do
      request <- parseUrl "http://google.com/"
      withManager $ \manager -> do
          response <- http request manager
          responseBody response C.$$+- sinkFile "google.html"

我想要的是能够下载文件并且不会耗尽RAM,例如在性能等方面有效地做到这一点。最好能够“稍后”继续下载它们,意思是“现在的一部分,稍后的另一部分”。

我还找到了download-curl package on hackage ,但我不确定这是否合适,甚至不确定它会像我需要的那样逐 block 下载文件。

最佳答案

Network.HTTP.Conduit 提供了三个用于执行请求的函数:

在这三个函数中,前两个函数将使整个响应正文保存在内存中。如果你想在常量内存中操作,那么使用http函数。 http 函数使您可以通过 ResumableSource 访问流媒体接口(interface)

您在代码中提供的示例使用交错 IO 将响应正文写入恒定内存空间中的文件。因此,下载大文件时您不会耗尽内存。

关于haskell - 在 Haskell 中从互联网下载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718873/

相关文章:

递归时Haskell Print?

python - Zope 测试浏览器的 Haskell 等价物

haskell - RWST 管道中的空间泄漏

linux - 转储和丢弃特定应用程序的网络数据包的最佳方法是什么?

networking - 传播时间和传播延迟之间的差异

haskell - 如何捕获 Http.Conduit 的 simpleHttp 抛出的 404 状态异常

haskell - 创建 URL 别名或使深层 URL 更漂亮

iphone - 在 iOS 中发布请求?

haskell - x-oauth-basic header 在 CURL 和 HTTP.Conduit 中不同

haskell - 处理 http-conduit 中的 HTTP 查询参数