3

我应该使用哪个库来解析来自套接字流的 HTTP 请求?我想要一个可以包含部分或多个 HTTP 请求的惰性 ByteString 的东西。

我也对响应 HTTP 请求的类似内容感兴趣(将其传递给响应对象并获取惰性 ByteString 以写入套接字)

编辑添加更多信息:这个界面是理想的,但当然不是必需的:

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

在部分请求的情况下,Maybe RequestNothing并且 ByteString 与输入相同。

谢谢 :-)

4

3 回答 3

1

为了处理这种类型的流数据,当前的解决方案是使用 iteratee 或 iteratee 之类的库之一。Conduit、Pipes(可能被重命名为代理,因为它可以处理双向数据以及其他独特的好处)、Iteratee、枚举器、iterIO 等。管道库似乎对依赖它的数字库有显着的领先优势。

您应该查看hackage.haskell.org 上的 Conduit 部分,尤其是http-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"
于 2012-11-20T04:15:29.380 回答
0

我认为您可以仅Network.HTTP针对基本实现,但我认为它本身不支持ByteStrings.

于 2012-04-11T18:10:14.083 回答
0

管道在特征方面具有与导管不同的策略。Conduit 将其所有功能打包在一起,而 Pipes 更喜欢将它们分开打包。

管道字节串是我相信你正在寻找的包。

它可以通过运行安装:

cabal install pipes-bytestring

要查找其他管道包,您可以运行:

cabal list pipes

或者你也可以搜索hackage

于 2014-03-05T21:43:46.627 回答