Parsen von HTTP-Headern in C++
Ich bin mit curl zur Kommunikation mit einem server.
Wenn ich eine Anfrage für Daten erhalte ich den HTTP-Header, gefolgt von jpeg-Daten durch eine Grenze getrennt und zwar so:
Muss ich analysieren
- Der boundary string
- Die Content-Length.
Habe ich kopiert die eingehenden Daten in einem char-array in etwa so:
static size_t OnReceiveData ( void * pvData, size_t tSize, size_t tCount, void * pvUser )
{
printf("%*.*s", tSize * tCount, tSize * tCount, pvData);
char* _data;
if(pvData != nullptr && 0 != tCount)
{
_data = new char[tCount];
memcpy(_data, pvData, tCount);
}
return ( tCount );
}
Wie kann ich am besten tun Sie dies in C++?? Wie kann ich eigentlich überprüfen und analysieren die _data array für die Informationen, die ich will?? Sind die alle boost-Bibliotheken, die ich benutzen kann zum Beispiel???
Eine Antwort, die nicht mit boost oder irgendetwas würde sehr geschätzt werden.
InformationsquelleAutor Harry Boy | 2014-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man Parsen der Header-on-the-fly, oder stellen Sie Sie in einer Karte und post-Prozess später.
Verwenden
find
,substr
Methoden aus der std::string.Blick auf Boost String Algorithmen Library, es enthält viele algorithmen, z.B.
trim
z.B. Platz-Header in die
std::map
und drucken Sie (Rohschnitt):Erhalten Sie die Ausgabe:
Dass die überschriften, die Sie extrahieren konnte der Bedarf für das post-processing.
InformationsquelleAutor Grigorii Chudnov
Den cpp-Netzwerkbibliothek Projekt (basierend auf boost) enthält einen vollständigen MIME-parser (geschrieben mit boost.Geist).
Ich bin nicht wirklich glücklich mit der Schnittstelle des parsers, aber es funktioniert gut.
InformationsquelleAutor Marshall Clow
Ich würde alle Header in eine Karte, nach denen Sie leicht Durchlaufen wird. Keine Verstärkung benötigt. Hier ein grundlegendes Beispiel arbeiten mit libcurl:
InformationsquelleAutor jvandenbroek