首页 > 解决方案 > 无法在 PythonAnywhere 上获取烧瓶 python API 的请求标头

问题描述

我已经部署了一个基于烧瓶的 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_nameapp_key. 如果在标头中未找到,则 API 仅返回错误。我从邮递员那里调用这个 API 并包含了app_nameapp_key

在此处输入图像描述

但它总是抛出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_nameapp_key也不存在。看起来由于某种原因PythonAnywhere不接受这些请求标头。有谁知道问题是什么,我该如何解决。请帮忙。谢谢

标签: pythonflaskpython-requestshttp-headerspythonanywhere

解决方案


'app_name' and 'app_key'在 Python 中计算为 True,因此您的 if 语句询问键 True 是否在标题中,并且可能不在。

尝试使用if 'app_name' in request.headers and 'app_key' in request.headers'


推荐阅读