4

次のヘッダーを持つ生の JSON 文字列を含む POST 要求を送信しようとしています: Content-Type: application/json.

ドキュメントを見ると、このようなことができることがわかります...

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

私の問題は、私がこの時点に到達したときに、$dataすでにjson_encode'd' されていることです。

以下を試してみましたが、うまくいきません。

$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);

私の質問はjson、既にエンコードされた配列でオプションを使用できますか? Content-Typeまたは、単にヘッダーを設定する方法はありますか?

4

2 に答える 2

4

guzzle のドキュメントhttp://docs.guzzlephp.org/en/latest/request-options.html#jsonによると

既にエンコードされている json を body パラメーターに直接渡すことができます

注 この要求オプションは、Content-Type ヘッダーのカスタマイズや、PHP の json_encode() 関数のオプションのいずれもサポートしていません。これらの設定をカスタマイズする必要がある場合は、body リクエスト オプションを使用して JSON エンコード データをリクエストに渡し、headers リクエスト オプションを使用して正しい Content-Type ヘッダーを指定する必要があります。

このオプションは、body、form_params、または multipart では使用できません

于 2016-04-18T15:20:43.007 に答える
0

Guzzle は、コンテンツを自動的にエンコードしてヘッダーを設定するjson Request オプションも提供します。Content-Type詳細については、リンクを参照してください。実際、提供されている例では PUT リクエストを使用しています。

$response = $client->request('PUT', '/put', ['json' => ['foo' => 'bar']]);
于 2016-04-18T21:31:10.630 に答える