2012-08-30 3 views
6

Ich versuche, die Bedeutung von rohen Post-Daten zu verstehen. Die PHP-Handbuchseite für $HTTP_RAW_POST_DATA besagt nur, dass diese Variable Raw POST data enthält.Was ist die Raw Post Daten

Wann wird diese Variable gesetzt und welche Bedeutung haben rohe Post-Daten?

Ich verstehe die $_POST aber völlig verwirrt mit $HTTP_RAW_POST_DATA

+2

Haben Sie versucht zu sehen, was ist da? 'var_dump ($ HTTP_RAW_POST_DATA);' oder noch besser 'var_dump (file_get_contents (" php: // input "));' – zerkms

+0

@zerkms: Ja, es ist 'NULL'. Ich habe versucht beide und Ausgabe ist 'NULL',' string (0) "" 'bzw. – Daric

+1

http://Stackoverflow.com/questions/3173547/whats-the-difference-between-post-and-raw-post-in- php-at-all –

Antwort

9

Eine HTTP-Anforderung besteht aus zwei Teilen. Eine Reihe von Headern und einem Körper.

Die Header enthalten Dinge wie die angeforderte URL und das Zwischenspeichern von Steuerungshelfern (wie zB "Ich habe eine Version von gestern, gib mir nur eine neue, wenn es Änderungen gibt, OK?").

Je nach Art der Anfrage kann der Text erscheinen oder nicht. POST-Anfragen haben Körper.

Der Körper kann in jedem Format sein, das der Kunde mag. Einer der Header teilt dem Server mit, welches Format er hat.

Es gibt ein paar Formate, die von HTML-Formularen verwendet werden, und PHP kann diese analysieren und die Daten in $_POST setzen.Wenn die Daten in einem anderen Format vorliegen, z. B. JSON, oder wenn die Daten nicht den Quirks von PHP entsprechen (z. B. die Regeln für das Vorhandensein von [] am Ende von Schlüsseln mit demselben Namen), möchten Sie dies möglicherweise tun greifen Sie direkt auf die Daten zu, damit Sie sie selbst analysieren können.

Das sind die rohen POST-Daten.

+0

Ordentliche Erklärung! – Daric

1

HTTP ist ein textbasiertes Protokoll, so dass alle Daten als Strings übergeben wird. Wenn Sie mit $_POST arbeiten, haben Sie bereits die übergebenen Daten verarbeitet, damit Sie in einem Array-Formular vorliegen. Dies geschieht automatisch, bevor das Steuerelement an Ihr Skript übergeben wird.

So in rohen Post-Daten gibt es Daten, wie es durch das Netzwerk übergeben wurde.

wahrscheinlich, dass Sie sehen a=1&b=2 Daten, wie Sie es in Urls sehen

+0

Danke @zerkms. – Daric

1

Eines der Dinge, die Sie HTTP-Protokoll tun können, ist eine POST-Anforderung tun, die einen Text zurück an den Server sendet.

$HTTP_RAW_POST_DATA wird diesen Text enthalten, egal was es sagt.

Die meiste Zeit, wenn wir eine POST-Anfrage machen, fügen wir dem gesendeten Text einen "Inhaltstyp" hinzu. Dies sagt dem Server, welche Art von Inhalt es ist. Die meiste Zeit im Web senden wir den Inhaltstyp "application/x-www-form-urlencoded".

Wenn ein Server eine POST-Anfrage mit diesem Inhaltstyp Marker empfängt, weiß der Server, um zu versuchen, die Daten in ein $_POST Array zu drehen, so dass „Test = Hallo“ wird:

$_POST['test']='hello' 
4

$_POST kann sein sagte, als und das Ergebnis nach dem $HTTP_RAW_POST_DATA Spaltung, php spaltet die rohen Post-Daten und Formate in der Art, wie wir es in den $_POST Zum Beispiel sehen:

$HTTP_RAW_POST_DATA sieht so etwas wie diese

key1=value1&key2=value2 

dann würde $_POST wie folgt aussehen:

$_POST = array(
    "key1" => "value1", 
    "key2" => "value2",); 
0

$HTTP_RAW_POST_DATA enthält die rohen POST Daten wie folgt aus:

  • Text
  • json
  • xml
  • html

Im Allgemeinen sollte php://input statt $HTTP_RAW_POST_DATA. da verwendet werden, Diese Funktion wurde ab PHP 5.6.0 dekomprimiert. Von dieser Funktion wird dringend abgeraten.

Quelle: php.net - $HTTP_RAW_POST_DATA