web-dev-qa-db-ja.com

Guzzle POST Bodyに未加工のJSONを含めることはできますか?

これは非常に単純なはずですが、答えを探すために何時間も費やしてきて、本当に行き詰まっています。私は基本的なLaravel=アプリケーションを構築しており、現在作成しているCURLリクエストをGuzzleで置き換えています。すべてのCURL関数は、本体で未加工のJSON変数を利用しています。

機能するGuzzleクライアントを作成しようとしていますが、サーバーが「無効なリクエスト」で応答しており、投稿しているJSONで何か怪しいことが起こっているのではないかと思っています。 Guzzle POST request bodyで未加工のJSONを使用できないかどうか疑問に思い始めていますか?サーバーから有効な応答を受け取っているのでヘッダーが機能していることと、JSONが現在CURLリクエストで機能しているので有効です。

どんな助けでも大歓迎です。

        $headers = array(
            'NETOAPI_KEY' => env('NETO_API_KEY'),
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'NETOAPI_ACTION' => 'GetOrder'
        );

    // JSON Data for API post
    $GetOrder = '{
        "Filter": {
            "OrderID": "N10139",
                "OutputSelector": [
                    "OrderStatus"
                ]
        }
    }';

    $client = new client();
    $res = $client->post(env('NETO_API_URL'), [ 'headers' => $headers ], [ 'body' => $GetOrder ]);

    return $res->getBody();
10
Jason Hill

'json'リクエストオプション ;を使用して、通常の配列をJSONとして送信できます。これにより、適切なヘッダーも自動的に設定されます。

$headers = [
    'NETOAPI_KEY' => env('NETO_API_KEY'),
    'Accept' => 'application/json',
    'NETOAPI_ACTION' => 'GetOrder'
];

$GetOrder = [
    'Filter' => [
        'OrderID' => 'N10139',
        'OutputSelector' => ['OrderStatus'],
    ],
];

$client = new client();
$res = $client->post(env('NETO_API_URL'), [
    'headers' => $headers, 
    'json' => $GetOrder,
]);
21
Ja͢ck

おそらくボディのMIMEタイプを設定する必要があります。これは、setBody()メソッドを使用して簡単に行うことができます。

$request = $client->post(env('NETO_API_URL'), ['headers' => $headers]);
$request->setBody($GetOrder, 'application/json');
0
user2479930