Разница в теле запроса в тестировании шлюза api aws и curl

Я пытаюсь добавить метод POST HTTP к своему шлюзу AWS API. Я использую структуру SAM с Python.

Я обнаружил, что существует разница в "теле" ответа, когда он создается с моего рабочего стола (curl или почтальон) и AWS API Gateway 'TEST'

Прямо сейчас команда «POST» печатает только объект «событие», полученный lambda_handler. (Я использую объект для хранения события, как вы можете видеть ниже)

def add(self):
    response = {
        "statusCode": 200,
        "body": json.dumps(self._event)
    }
    return response

Когда я использую опцию «ТЕСТ» в консоли шлюза API, вводя:

{"username":"xyz","password":"xyz"}

Я получаю следующий вывод:

{
 "body": "{\"username\":\"xyz\",\"password\":\"xyz\"}",
<the rest of the response>
}

Однако, когда я отправляю запрос curl (или почтальону):

curl --header "Content-Type: application/json"   --request POST   --data '{"username":"xyz","password":"xyz"}' <aws api gateway link>

Получаю такой ответ:

{
"body": "eyJ1c2VybmFtZSI6Inh5eiIsInBhc3N3b3JkIjoieHl6In0="
<the rest of the response>
}

Как вы думаете, в чем разница между двумя тестами?


person nerez    schedule 12.11.2018    source источник


Ответы (1)


Curl и Postman, похоже, автоматически кодируют Base64 ваши учетные данные для аутентификации.

Ответы такие же. Последний ответ - это токен первого ответа в кодировке Base64.

person twils0    schedule 12.11.2018
comment
Отличный улов! Я добавил x-amazon-apigateway-binary-media-types: */* в файл yml, который, по-видимому, вызвал декодирование. Спасибо! Это немного вводит в заблуждение, что тест 'API Gateway' также не представляет декодированного тела - person nerez; 12.11.2018