在Erlang中读取HTTP请求的主体

时间:2010-11-30 11:42:01

标签: http erlang mochiweb

我一直在研究Mochiweb,但是当我通过套接字收到请求时,我找不到一种方法来阅读身体。

我不仅限于Mochiweb,任何其他HTTP库对我都有好处。

我也试过gen_tcp:listen(Port, [{packet, http}]),这样我可以在收到HTTP请求时读取正文/标题,但我必须手动处理响应并保持套接字打开以获取更多请求,所以我不喜欢使用这个解决方案。

我的目的是接收大型机构的请求,而不是等待接收全身以便开始阅读/处理它们。

1 个答案:

答案 0 :(得分:3)

使用mochiweb,您可以使用Req:stream_body/3折叠请求正文的块。 它期望块处理程序函数作为第二个参数。使用此处理程序 {ChunkSize, BinaryData}和每个块的状态,因为它是从套接字接收的。

示例(检索[反向]块列表):

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