Чтение в Эрланге тело HTTP -запроса, как он получен

StackOverflow https://stackoverflow.com/questions/4313316

  •  29-09-2019
  •  | 
  •  

Вопрос

Я искал 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),
...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top