PHP - Posting JSON über file_get_contents
Ich versuche zu POSTEN JSON-Inhalte zu einem entfernten REST-Endpunkt, aber der 'Inhalt' Wert scheint leer zu sein bei der Lieferung. Alle anderen Header etc werden richtig empfangen, und die web-service-tests erfolgreich mit einem browser-basierten test-client.
Gibt es ein problem mit meiner syntax unten, wo ich angeben, den "Inhalt" - Feld?
$data = array("username" => "duser", "firstname" => "Demo", "surname" => "User", "email" => "[email protected]");
$data_string = json_encode($data);
$result = file_get_contents('http://test.com/api/user/create', null, stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => array('Content-Type: application/json'."\r\n"
. 'Authorization: username:key'."\r\n"
. 'Content-Length: ' . strlen($data_string) . "\r\n"),
'content' => $data_string)
)
));
echo $result;
InformationsquelleAutor der Frage Ben | 2012-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist der code den ich immer verwende und es sieht ziemlich ähnlich (aber das ist natürlich für die x-www-form-urlencoded).
Vielleicht ist Ihr
username:key
werden mussbase64_encode
'd....InformationsquelleAutor der Antwort Bob Davies
Den früheren Antwort von
ist falsch. Diese Funktion funktioniert manchmal, aber es ist ungenau und wird scheitern, wenn Sie nicht mit dem Content-type application/x-www-form-urlencoded und übergeben Sie einen Benutzernamen und ein Passwort.
Es ist die Arbeit für die writer da application/x-www-form-urlencoded " ist der default-Content-type, aber seine Behandlung der Benutzernamen und das Passwort überschreiben der früheren Erklärung der Inhalte geben.
Hier ist die korrigierte Funktion:
Beachten Sie die Zeile:
$opts['http']['header' .= (Punkt gleich zum Anhängen an das array-element.)
InformationsquelleAutor der Antwort Dana Kolodziejczyk