Не удается получить доступ к запросу json_body при использовании Chalice - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь сделать запрос curl для моего Python API, который использует пакет AWS Chalice.

Когда я пытаюсь получить доступ к app.current_request.json_body, выдается ошибка JSON Parse.Не могу понять, почему это происходит.Насколько я могу судить, мой JSON отформатирован правильно.

Вот запрос скручивания:

(echo -n '{"data": "test"}') |
curl -H "Content-Type: application/json"  -d @-  $URL

Вот код чаши питона:

app = Chalice(app_name='predictor')

@app.route('/', methods=['POST'], content_types=['application/json'])
def index():
    try:
        body = app.current_request.json_body
    except Exception as e:
        return  {'error':  str(e)}

КогдаЯ вызываю маршрут, используя указанный выше запрос curl. Я получаю следующую ошибку:

{"error": "BadRequestError: Error Parsing JSON"}

Примечание. При удалении .json_body из app.current_request.Я больше не получаю ошибку.

Есть мысли?

1 Ответ

0 голосов
/ 11 июля 2019

Документация действительно указывает, что проблема в типе контента:

Поведение функции представления по умолчанию поддерживает тело запроса application / json.Когда запрос сделан с Content-Type application / json, атрибут app.current_request.json_body автоматически устанавливается для вас.Это значение является проанализированным телом JSON.

Вы также можете настроить функцию просмотра для поддержки других типов контента.Вы можете сделать это, указав значение параметра content_types для вашей функции app.route.Этот параметр является списком допустимых типов контента.

Предполагается, что изменение Content-Type может заставить json_body работать, но мне не удалось добиться успеха.

Однако, используя app.current_request.raw_body.decode() вместо app.current_request.json_body решает проблему.

...