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、enumerator、iterIO など。コンジット ライブラリは、それに依存するライブラリの数を大幅にリードしているようです。

hackage.haskell.orgのConduit セクション、特にhttp-conduitを参照してください。最初の例の 1 つは、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

パイプは、機能に関してコンジットとは異なる戦略を持っています。コンジットはすべての機能を一緒にパッケージ化しますが、パイプはそれらを個別にパッケージ化することを好みます。

pipes-bytestringは、あなたが探していたと思われるパッケージです。

次を実行してインストールできます。

cabal install pipes-bytestring

実行できる他のパイプパッケージを見つけるには:

cabal list pipes

または、ハックを検索することもできます

于 2014-03-05T21:43:46.627 に答える
0

基本的な実装だけはできると思いますがNetwork.HTTP、ネイティブにサポートしているとは思いませんByteStrings

于 2012-04-11T18:10:14.083 に答える