Domanda

ho cercato in Mochiweb, ma non riesco a trovare un modo per leggere il corpo mentre sto ricevendo la richiesta attraverso la presa.

io non sono limitato a Mochiweb, qualsiasi altra libreria HTTP sarebbe un bene per me.

Ho provato anche gen_tcp:listen(Port, [{packet, http}]), in questo modo posso leggere il corpo / intestazioni mentre sto ricevendo la richiesta HTTP, ma devo gestire manualmente le risposte e mantenendo il socket aperto per ulteriori richieste, quindi preferisco non usare questa soluzione .

La mia intenzione è quella di ricevere richiesta con i corpi di grandi dimensioni e di non aspettare di ricevere il corpo pieno, al fine di iniziare la lettura / elaborarli.

È stato utile?

Soluzione

Con mochiweb si può piegare pezzi del corpo della richiesta utilizzando Req:stream_body/3 . Si aspetta una funzione di gestione pezzo come secondo argomento. Questo gestore viene chiamato con {ChunkSize, BinaryData} e il tuo stato per ogni pezzo, in quanto viene ricevuto dalla presa.

Esempio (il recupero di un [invertito] elenco dei pezzi):

MaxChunkSize = 100,
InitialState = [],
ChunkHandler = fun ({_Size, Bin}, State) -> [Bin | State] end, 
List = Req:stream_body(MaxChunkSize, ChunkHandler, InitialState),
...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top