So isolieren Sie die HTTP-Header / body von einer PHP-Sockets-Anfrage

8

Ich verwende eine Socket-Verbindung in PHP, um Daten an einen Apache-Webserver zu senden. Ich bin ein bisschen neu in dieser Technik, und ich bin mir nicht sicher, wie man die Überschriften vom Körper der Antwort isoliert.

Sendecode:

%Vor%

Servercode:

%Vor%

Beim Posten auf einem Server bekomme ich:

%Vor%

Wie erwartet. Ich möchte aber die Header entfernen und einfach den Text von "Hallo, das ist Server ....." lesen. Wie kann ich das Ende der Header zuverlässig erkennen und den Körper in eine Variable lesen?

Auch ein anderer Server, den ich getestet habe, antwortet mit diesem:

%Vor%

Was sind die "4d" und "0" um den Fließtext?

Danke!

PS bevor jemand CURL benutzt, kann ich leider nicht: - (

    
Rob 06.01.2012, 10:09
quelle

3 Antworten

15

Sie können die Kopfzeile vom Hauptteil trennen, indem Sie sie in einem doppelten Zeilenumbruch aufteilen. Es sollte <CRLF><CRLF> sein, damit normalerweise funktioniert:

%Vor%

Zuverlässiger sollten Sie eine Regex verwenden, um Zeilenwechselvariationen zu erfassen (es ist sehr unwahrscheinlich, dass dies jemals passiert):

%Vor%

Die Sache mit 4d und 0 wird als Chunked-Codierung bezeichnet. (Es ist hexadezimale Zahlen, die durch einen anderen Zeilenumbruch getrennt sind, und beschreibt die Länge des folgenden Inhaltsblocks).

Um das zu löschen, müssen Sie zuerst die Header ansehen und sehen, ob es einen entsprechenden Transfer-Encoding: -Eintrag gibt. Dies ist, wo es kompliziert wird, und ratsam, eine der unzähligen vorhandenen HTTP-Benutzerland-Verarbeitungsklassen zu verwenden. PEAR hat einen .

    
mario 06.01.2012, 10:15
quelle
0

Überschriften sollten mit "\r\n\r\n" (zwei Mal) enden. Diese 4d und 0 sind möglicherweise Teil Ihrer PHP-Antwort (sie sind nicht Teil der Header).

    
Rolice 06.01.2012 10:13
quelle
0

In den meisten Fällen sollte Marios Antwort funktionieren, aber ich habe gerade versucht, diese Methode auf die Antwort von Couch DB anzuwenden und es gibt Fälle, in denen es nicht funktioniert.

Wenn die Antwort keine Dokumente enthält, dann legt Couch DB "\ r \ n \ r \ n" in den Antworttext, um die Ergebnisse gut zu formatieren und in diesem Fall reicht es nicht aus, die Antwort durch "\ r \ n \ r \ n "weil Sie versehentlich den Endteil des Körpers schneiden können.

%Vor%

Das folgende Parsen scheint für Couch DB zuverlässiger zu sein:

%Vor%     
Anonymous 06.07.2015 09:46
quelle

Tags und Links