2012-04-11 135 views
3

我應該使用哪個庫來解析來自套接字流的HTTP請求?我想要一些可以包含部分或多個HTTP請求的惰性ByteString。解析Haskell中的HTTP請求

我也有興趣在響應HTTP請求(通過它的響應對象,並讓懶惰的字節字符串寫入套接字)

編輯以添加更多信息類似的東西: 這個接口會是理想的,但當然不是必需的:

ByteString {- the initial buffer -} -> (Maybe Request, ByteString {- remaining buffer -}) 

在部分請求的情況下,也許請求沒有和字節串是相同的第e輸入。

感謝:-)

+0

你想要什麼輸出DO

它可以通過運行安裝嗎? (包含解析請求的列表?)以及您希望如何處理部分請求? – huon 2012-04-11 06:20:34

回答

1

要處理這種類型的流數據,當前的解決方案是使用iteratee或iteratee之一(如庫)。管道,管道(可能會更名爲代理服務器,因爲它可以處理雙向數據以及其他獨特優勢),迭代器,枚舉器,iterIO等。導管庫似乎在依賴它的數字庫上有着顯着的優勢。

您應該特別關注Conduit section on hackage.haskell.orghttp-conduit。第一個例子中的一個獲得http響應,然後將其寫入恆定空間的文件中。

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 _ _ _ src <- http request manager 
     src C.$$+- sinkFile "google.html" 
0

管道與管道有關的功能有不同的策略。 Conduit將其所有功能包裝在一起,而Pipes則傾向於將它們分開包裝。

pipes-bytestring是我相信你一直在尋找的軟件包。

cabal install pipes-bytestring 

要找到可以運行其它管道包:

cabal list pipes 

,或者您也可以搜索hackage