Lesen von JSON POST mit PHP
Bei dieser Anfrage stößt der Benutzer auf Schwierigkeiten beim Extrahieren von POST-Werten und beim Zurückgeben eines JSON-codierten Arrays aus einem Webdienst nach der Umstellung auf die Verwendung eines JSON-basierten Inhaltstyps. Es stellte sich die folgende Frage:
Frage:
Was ist die geeignete Methode zum Abrufen von POST-Werten, wenn der Inhaltstyp application/json ist?
Antwort:
Herkömmliche PHP-Superglobals wie $_POST enthalten nicht das Gewünschte Daten, wenn der Inhaltstyp application/json ist. Um auf die rohen POST-Daten zuzugreifen, ist es notwendig, von einer anderen Quelle zu lesen.
Lösung:
Verwenden Sie die Funktion file_get_contents() von PHP, um die rohen POST-Eingaben abzurufen und Analysieren Sie es dann mit json_decode(). Dieser Ansatz ermöglicht den Zugriff auf die Daten in einem assoziativen Array.
Zusätzliche Überlegung:
Der Testcode des Benutzers muss ebenfalls geändert werden. CURLOPT_POSTFIELDS sollte verwendet werden, um den Anforderungstext als JSON-Zeichenfolge festzulegen, anstatt zu versuchen, ihn als application/x-www-form-urlencoded zu kodieren.
Aktualisierter PHP-Code zum Testen:
$data_string = json_encode($data); $curl = curl_init('http://webservice.local/'); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) ); $result = curl_exec($curl); $result = json_decode($result); var_dump($result);
Aktualisierter PHP-Code für das Web Service:
header('Content-type: application/json'); // Remove duplicate line // header('Content-type: application/json'); // Remaining code...
Das obige ist der detaillierte Inhalt vonWie rufe ich POST-Werte mit dem Inhaltstyp „application/json' in PHP ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!