A fix for receive response
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- networking
Direzione di ricerca
Inizia in thirdparty/HTTPRequest/include/HTTPRequest.hpp, nel ciclo di lettura della risposta attorno a socket.recv e alla ricerca del terminatore dell’header. Riproduci una risposta che arriva in pacchetti parziali, quindi verifica che il parsing degli header attenda la ricezione degli header di risposta completi invece di interrompersi prematuramente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Fix problem when receive partly response packet:
diff --git a/thirdparty/HTTPRequest/include/HTTPRequest.hpp b/thirdparty/HTTPRequest/include/HTTPRequest.hpp
index c446e216..1c559632 100644
--- a/thirdparty/HTTPRequest/include/HTTPRequest.hpp
+++ b/thirdparty/HTTPRequest/include/HTTPRequest.hpp
@@ -1198,6 +1198,7 @@ namespace http
bool removeCrlfAfterChunk = false;
// read the response
-
int header_recv_times = 0; for (;;) { const auto size = socket.recv(tempBuffer.data(), tempBuffer.size(),
@@ -1213,7 +1214,16 @@ namespace http
// Empty line indicates the end of the header section (RFC 7230, 2.1. Client/Server Messaging)
const auto endIterator = std::search(responseData.cbegin(), responseData.cend(),
headerEnd.cbegin(), headerEnd.cend());
-
if (endIterator == responseData.cend()) break; // two consecutive CRLFs not found
-
if (endIterator == responseData.cend()) -
{ -
if (header_recv_times < 3) -
{ -
header_recv_times++; -
continue; -
} -
else -
break; // two consecutive CRLFs not found -
} const auto headerBeginIterator = responseData.cbegin();
- Lingua principale
- C++
- Stelle
- 969
- Fork
- 200
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di elnormous/HTTPRequest
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
elnormous/HTTPRequest#79 · 2 reazioni ·
-
A couple of ideasAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
elnormous/HTTPRequest#76 · 2 commenti ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
elnormous/HTTPRequest#75 · 1 commento ·
-
Post requests don't work.Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
elnormous/HTTPRequest#74 · 1 commento ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 55/100
elnormous/HTTPRequest#72 ·
Tutte le issue di elnormous/HTTPRequest
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
sandialabs/seacas#945 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ROCm/FastFlowLM#757 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
espressif/esp-matter#1867 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
mltframework/shotcut#1920 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno