兩個資源我發現,使用流行的哈斯克爾庫流下載推薦的食譜是:哈斯克爾流媒體下載
- https://haskell-lang.org/library/http-client#Streaming
- http://www.alfredodinapoli.com/posts/2013-07-20-slick-http-download-in-haskell.html
我將如何修改代碼前,以(a)保存到文件,(b)只打印一個(取5)字節響應,而不是整個響應到stdout?
我在(b)嘗試是:
#!/usr/bin/env stack
{- stack --install-ghc --resolver lts-5.13 runghc
--package http-conduit
-}
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.IO.Class (liftIO)
import qualified Data.ByteString as S
import qualified Data.Conduit.List as CL
import Network.HTTP.Simple
import System.IO (stdout)
main :: IO()
main = httpSink "http://httpbin.org/get" $ \response -> do
liftIO $ putStrLn
$ "The status code was: "
++ show (getResponseStatusCode response)
CL.mapM_ (take 5) (S.hPut stdout)
從而未能映射(坐5),以及除其他事項外建議給我,我還是不明白,在單子的映射是如何工作的,或liftIO 。
而且,這種資源:
http://haskelliseasy.readthedocs.io/en/latest/#note-on-streaming
...給了我一個警告,「我知道我在做什麼,我想對資源,如流更細粒度的控制「這不容易或普遍支持。
其它地方我看了看:
- Downloading large files from the Internet in Haskell
- https://hackage.haskell.org/package/wreq
- https://hackage.haskell.org/package/pipes-http
如果有在使這更容易的Haskellverse東西,更喜歡Python的請求:
response = requests.get(URL, stream=True)
for i,chunk in enumerate(response.iter_content(BLOCK)):
f.write(chunk)
我也很欣賞那裏的提示,或指向2016年的藝術狀態。
您是否確實需要流式傳輸? (那麼你是否一次獲得足夠多的數據,使其全部在內存中是不可接受的?) – Alec
是的,我是。 – Mittenchops
我可能應該選擇一個更合理的字節數,如一些2^n ... – Mittenchops