解析Haskell中的HTTP请求

问题描述:

我应该使用哪个库来解析来自套接字流的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

我认为你能为基本实现只是Network.HTTP,但我不认为它本身支持ByteStrings

要处理这种类型的流数据,当前的解决方案是使用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" 

管道与管道有关的功能有不同的策略。 Conduit将其所有功能包装在一起,而Pipes则倾向于将它们分开包装。

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

cabal install pipes-bytestring 

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

cabal list pipes 

,或者您也可以搜索hackage