开发者

Reading in Erlang the body of a HTTP request as it is received

I've been looking into Mochiweb, but I can't find a way to read the body while I'm receiving the request through the socket.

I'm not limited to Mochiweb, any other HTTP library would be good for me.

I also tried gen_tcp:listen(Port, [{packet, http}]), this way I can read the body/headers while I'm receiving the HTTP request, but I must handle manually the responses and keeping t开发者_运维百科he socket open for more requests, so I prefer not to use this solution.

My intention is to receive request with large bodies and not to wait to receive the full body in order to start reading/processing them.


With mochiweb you can fold over chunks of the request body using Req:stream_body/3. It expects a chunk handler function as the second argument. This handler is called with {ChunkSize, BinaryData} and your state for every chunk, as it is received from the socket.

Example (retrieving a [reversed] list of chunks):

MaxChunkSize = 100,
InitialState = [],
ChunkHandler = fun ({_Size, Bin}, State) -> [Bin | State] end, 
List = Req:stream_body(MaxChunkSize, ChunkHandler, InitialState),
...
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜