Чтение в Эрланге тело HTTP -запроса, как он получен
Вопрос
Я искал MOCHIWEB, но я не могу найти способ прочитать тело, пока я получаю запрос через розетку.
Я не ограничиваюсь Mochiweb, любая другая библиотека HTTP была бы полезна для меня.
Я также пытался gen_tcp:listen(Port, [{packet, http}])
, Таким образом, я могу читать тело/заголовки, пока я получаю HTTP -запрос, но я должен обрабатывать ответы вручную и держать гнездо открытым для получения дополнительных запросов, поэтому я предпочитаю не использовать это решение.
Мое намерение состоит в том, чтобы получить запрос с большими органами и не ждать, чтобы получить полноправное тело, чтобы начать чтение / обработку их.
Решение
С 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),
...