Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

API GatewayからPayloadでLambdaにデータを送りたい

解決したいこと

Lambda関数をAPIGatewayをトリガーとして実行しています。
Lambdaに入力として画像を渡したいので、handlerのeventから文字列にデコードした画像を取り出すコードを書いていますが、
APIGatewayを通してリクエストするときに、Jsonをつけてポストできません。

以下のようにJsonをつけてリクエストしていますが、

Status Code 500 b'{"message":"Internal Server Error"}'

が返ってきます。

import requests
with open("my_image.jpg", 'rb') as rf:
    data = rf.read()
    data = base64.b64encode(data).decode("utf8")
    img_json = json.dumps({'img': "data"})
response = requests.post('https://******.execute-api.us-west-2.amazonaws.com/default/****', data=img_json)
curl -X POST -H "Content-Type: application/json" -d "{"img": "data"}" https://*******.execute-api.us-west-2.amazonaws.com/default/****

何かAPIGateway側で受信設定をする必要があるのでしょうか?
送り方が間違っているのでしょうか?

0

1Answer

img_json = json.dumps({'img': "data"})

コードがこの通りだとすると img の値が文字列 "data" になっています。

img_json = json.dumps({'img': data})

に直してください。また curl の

 -d "{"img": "data"}"

は文字列 "{"、裸の文字列 img、 文字列 ": "……の並びと解釈されるので -d '{img: data}' と同等であり、不正な JSON を送ることになります。データを送るなら

data='画像の Base64 データ'
curl -d "{\"img\": \"$data\"}" (略)

としてください。

0Like

Your answer might help someone💌