2016-08-08 67 views
-1

Ich verwende einen einfachen Client-Code in C, um POST und GET zum Server zu machen und den Datenstrom zu lesen. Zur Zeit drucke ich die vollständige Antwort, die in recv() empfangen wurde, und muss sie für die weitere Verwendung analysieren. Bevor ich den Datenstrom lese, möchte ich wissen, was der HTTP-Statuscode (200, 400, 401 usw.) vom Server ist. Ich bekomme dasselbe in Header. Gibt es eine Möglichkeit, HTTP-Code vor dem Lesen von Kopfzeilen zu erhalten?Wie Extrakte Parameter und Payload von Recv() in C lesen?

Was ist Best Practice, um Head-Parameter und Payload zu lesen? Ich suchte, aber die Antworten, die ich bekam, sollen '\ r \ n' Sequenz lesen und dann Logik anwenden. Gibt es einen besseren Weg?

Ich benutze Ubuntu-Systeme zum Testen dieses Codes. Es folgt Antwort gedruckt werden:

<p style="color:blue;">HTTP/1.1 401 Unauthorized 
Server: Apache-Coyote/1.1 
Content-Type: application/json 
Content-Length: 69 
Date: Mon, 08 Aug 2016 09:46:46 GMT 
</p> 
<p style="color:blue;">"You are not a authorized user to access this resource. Access denied." 
+0

Gibt es eine Möglichkeit, HTTP-Code vor dem Lesen von Kopfzeilen zu erhalten? "macht schon keinen Sinn. Der HTTP-Statuscode ist * in * einem Header. Unklar, was Sie fragen, oder warum Sie clientseitiges HTTP erneut implementieren, wenn bereits viele Arbeitsbibliotheken verfügbar sind. Um HTTP zu implementieren, benötigen Sie gute Kenntnisse von TCP, Sockets und RFC 2616 und seinen Nachfolgern. – EJP

Antwort

0

Nr recv() Rohdaten aus der Steckdose empfängt, TCP/IP in diesem Fall nehme ich an. TCP/IP ist ein Protokoll der unteren Ebene und hat nicht den Begriff HTTP-Statuscode, die HTTP-Daten sind nur Bytes ohne Bedeutung.

Also müssen Sie wirklich lesen Sie die Daten, interpretieren Sie es als HTTP-Protokolldaten, und erhalten Sie dann den Statuscode von ihm.


Sie sollten die Bedenken von TCP/IP und HTTP-Protokolle trennen. Sie können entweder eine einfache HTTP-Client-Bibliothek selbst schreiben, wenn Sie lernen möchten, oder eine vorhandene Bibliothek finden (libcurl kommt in den Sinn), wenn Sie Produktionsqualitätscode benötigen. Verwenden Sie dann die Bibliothek, um die HTTP-Protokollbehandlung zu verarbeiten, und blenden Sie den niedrigeren TCP/IP-Datenverkehr aus dem Anwendungscode aus.