3

AWS API Gatewayのラムダ関数に接続された単純な POST メソッドがあります。

(Gateway API コンソールを介して) テストを実行すると、すべて正常に動作し、探している結果が得られます。その単純さ - JSON を投稿し、JSON を取得します。

ただし、API をデプロイし、テストで使用したものと同じ JSON を (http ポスト経由で) 送信した後、「リクエスト本文を json に解析できませんでした」というメッセージが表示されます。

私が間違っているかもしれないことを誰かが知っていますか?注: モデルを使用するつもりはありません。JSON をパススルーしたいだけです。Amazonが「入力パススルー」のようなものを書いているとき、それは入力がラムダ関数にパススルーできることを意味していると思います。

以下は、私の AWS Gateway API セットアップの画像です。

メソッドリクエスト: ここに画像の説明を入力

統合リクエスト: ここに画像の説明を入力

メソッドの応答: ここに画像の説明を入力

統合応答: ここに画像の説明を入力

4

2 に答える 2

7

解決策を見つけました。問題は、POST リクエストで、ボディを JSON オブジェクトではなく文字列として送信する必要があり、その文字列を正しくフォーマットする必要があることでした。

すなわち '{"key1": "val1","key2": 22,"key3": 15,"key4": "val4"}'

そのようです:

function post() {


$.ajax({
    url: "https://myapi.us-east-1.amazonaws.com/myStage/myPath",
    type: "POST",
    data: '{"key1": "val1","key2": 22,"key3": 15,"key4": "val4"}',
    mozSystem: true,
    dataType: "text", //set to"json" usually
    success: function (result) {
        switch (result) {
            case true:
                processResponse(result);
                break;
            default:
                resultDiv.html(result);
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert('error ' + xhr.status + ' ' + thrownError);
        alert(thrownError);
    }
 });


};
于 2015-10-29T20:28:32.933 に答える
0

パラメータを文字列形式で設定します (json も配列もありません)。

curl の実行で http_build_query() 関数を使用しました。

$curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_URL => "https://your_url_here",
            CURLOPT_POST => 1,
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_POSTFIELDS => http_build_query(array(
                "key1" => "val1",
                "key2" => "val2",
            ))
        ));

        $resp = curl_exec($curl);
        print_r($resp);
        if (!curl_exec($curl)) {
            die('Error: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
        }
        curl_close($curl);
于 2016-09-21T10:44:30.603 に答える