关于如何在 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/