2016-04-18 5 views
4

Ich versuche, eine POST-Anfrage zu senden, die eine unverarbeitete JSON-Zeichenfolge mit der folgenden Überschrift enthält: Content-Type: application/json.Verwenden von PHP Guzzle HTTP 6 zum Senden von JSON mit Daten, die bereits codiert sind

Aus bei der Dokumentation sucht, kann ich sehen, dass ich etwas tun kann ...

$data = ['x' => 1, 'y' => 2, 'z' => 3]; 
$client = new \GuzzleHttp\Client($guzzleConfig); 
$options = [ 
    'json' => $data, 
]; 
$client->post('http://example.com', $options); 

Mein Problem ist, dass, wenn ich an diesen Punkt zu gelangen, $data bereits json_encode ‚d gewesen.

Ich habe Folgendes versucht, aber es funktioniert nicht.

$data = json_encode(['x' => 1, 'y' => 2, 'z' => 3]); 
$client = new \GuzzleHttp\Client($guzzleConfig); 
$options = [ 
    'body' => $data, 
    'headers' => ['Content-Type' => 'application/json'], 
]; 
$client->post('http://example.com', $options); 

Meine Frage ist: kann ich die json Option mit einem bereits codierten Array verwenden? Oder gibt es eine Möglichkeit für mich, einfach den Content-Type Header zu setzen?

+0

Ich weiß, dass dies ein wenig lückenhaft ist, aber kann man nicht passieren 'json_decode ($ data)' in sich selbst zurück:/ – Dale

+0

ich hielt, aber dieses Stück Code wird tausende Male ein laufen Tag, und es scheint unnötig, da es einen Weg geben muss, dies zu tun. Alles, was ich tun muss, ist ein Content-Type-Header –

Antwort

2

Nach docs verputzen der http://docs.guzzlephp.org/en/latest/request-options.html#json

Sie die bereits codiert json

Hinweis Diese Anfrage Option nicht unterstützt Anpassen der Content-Type Header oder eine der Optionen direkt in den Körper Parameter übergeben können von PHPs json_encode() -Funktion. Wenn Sie diese Einstellungen anpassen müssen, müssen Sie die JSON-codierten Daten selbst in die Anfrage mit der Option body request übergeben, und Sie müssen den korrekten Content-Type-Header mit der Header-Anforderung angeben.

Diese Option kann nicht mit dem Körper, form_params oder mehrteiliger bietet

+2

Ich muss einen Fehler gemacht haben, wenn ich den Content-Type-Header gesetzt habe, als wenn ich es gerade noch einmal versuchte es funktionierte! Mein Fehler. –

+0

Es sieht so aus, als ob dies jetzt veraltet ist: Die Übergabe der "body" -Anforderungsoption als Array zum Senden einer POST-Anforderung ist veraltet. Verwenden Sie die Anfrageoption "form_params", um eine Anwendung/x-www-form-urlencoded-Anfrage zu senden, oder die Anfrageoption "multipart", um eine mehrteilige/Formulardatenanforderung zu senden. – mmitchell

-1

Guzzle auch die jsonRequest option verwendet werden, die Ihre Inhalte automatisch kodieren und stellen Sie den Content-Type-Header. Weitere Informationen unter dem Link. Das angegebene Beispiel verwendet eine PUT-Anforderung.

$response = $client->request('PUT', '/put', ['json' => ['foo' => 'bar']]); 
+1

Dies ist im Grunde der Code in der ursprünglichen Frage, den sie * nicht * benutzen wollen. –

Verwandte Themen