Не удалось получить заголовки запроса для flask python API в PythonAnywhere - PullRequest
0 голосов
/ 26 апреля 2020

Я развернул flask приложение python на PythonAnywhere. Он содержит API, который требует ниже заголовков запроса:

app_name: <app-name>

app_key: <app-key>

Ниже приведен код:

@app.route('/api/app/get_id', methods=['POST'])
def get_id():
    try:
        if 'app_name' and 'app_key' in request.headers:
            """
            SOME CODE
            """
        else:
            return jsonify({"status": "unauthorized", "error": "authentication parameters missing"}), 401
    except Exception as e:
        log.error("Exception occurred {}".format(e))

Как вы можно увидеть, что ему нужно app_name и app_key. Если не найдено в заголовках, то API просто возвращает ошибку. Я звоню по этому API от почтальона и включил app_name и app_key:

enter image description here

Но он всегда выдает error authentication parameters missing. В моем локальном тестировании все работало нормально. Я также попытался отладить, поместив запись в журнал, как показано ниже:

@app.route('/api/app/get_id', methods=['POST'])
def get_id():
    try:
        log.error(request.headers)   # <-- logging
        if 'app_name' and 'app_key' in request.headers:
            """
            SOME CODE
            """
        else:
            return jsonify({"status": "unauthorized", "error": "authentication parameters missing"}), 401
    except Exception as e:
        log.error("Exception occurred {}".format(e))

Но app_name и app_key также не было в файле журнала. Похоже, по какой-то причине PythonAnywhere не принимает эти заголовки запроса. Кто-нибудь знает в чем проблема и как я могу ее решить. Пожалуйста помоги. Спасибо

1 Ответ

1 голос
/ 27 апреля 2020

'app_name' and 'app_key' оценивается как True в Python, поэтому ваш оператор if спрашивает, есть ли ключ True в заголовках и, вероятно, его нет.

Попробуйте использовать if 'app_name' in request.headers and 'app_key' in request.headers'

...