Проверка JSON почтового запроса, поступающего в приложение python flask - PullRequest
2 голосов
/ 09 марта 2020

У меня есть простое flask приложение

@app.route("/endpoint/", methods=['POST'])
def mypostmethod():

    if 'Content-Type' in request.headers and request.headers['Content-Type'] == 'application/json':

        post_data = request.json

        req_data = request.get_json()

        content = req_data['content']

        return content

, и я свернулся следующим образом:

curl -X POST "localhost: 8080 / endpoint /" -H " Content-Type: application / json "-d '{' content ':' Blah '}'

Я получаю следующую ошибку:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>Failed to decode JSON object: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)</p>

Это потому, что , json тело в cURL использует одинарные кавычки, когда я использую двойные кавычки, это работает.

Мне было интересно, как я могу добавить некоторый код в мое приложение flask, чтобы проверить эту ошибку и вернуть пользовательский код ответа и какое-нибудь ответное сообщение? Куда мне добавить блок try? Можете ли вы использовать мой код в качестве примера.

Ответы [ 3 ]

0 голосов
/ 09 марта 2020

Это просто недопустимый аргумент для опции -d в cURL. Вам необходимо заменить одинарные кавычки на двойные в аргументе и заключить его в одинарные кавычки.

wrong: '{'content': 'Blah'}'
ok:    '{"content": "Blah"}'
0 голосов
/ 09 марта 2020

Я не очень разбираюсь в JSON, но я бы попробовал что-то вроде этого:

Данные, которые вы получили (я думаю) в request.json.

Так как это ошибка, вы получил - Failed to decode JSON object: Expecting property name enclosed in double quotes, возможно, я бы сделал

include json

try:
 json.dumps(request.json)
except JSONDecodeError as e:
 return("wrong request data")

JSONDecodeError упоминается в json документации библиотеки здесь

0 голосов
/ 09 марта 2020

Используйте двойные кавычки в вашем json:

curl -X POST "localhost:8080/endpoint/" -H "Content-Type: application/json" -d '{"content": "Blah"}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...