在Haskell中从Internet下载大文件

有关于如何在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,但我不肯定这是一个很好的选择,甚至是它按照我需要的方式下载文件块.

最佳答案
Network.HTTP.Conduit提供了三个执行请求的功能:

> simpleHttp
> httpLbs
> http

在这三个函数中,前两个函数将使整个响应体生存在内存中.如果要在常量内存中操作,请使用http函数. http功能使您可以通过ResumableSource访问流媒体界面

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

转载注明原文:在Haskell中从Internet下载大文件 - 代码日志