python - 无法在 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_name
和app_key
. 如果在标头中未找到,则 API 仅返回错误。我从邮递员那里调用这个 API 并包含了app_name
和app_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_name
中app_key
也不存在。看起来由于某种原因PythonAnywhere
不接受这些请求标头。有谁知道问题是什么,我该如何解决。请帮忙。谢谢
解决方案
'app_name' and 'app_key'
在 Python 中计算为 True,因此您的 if 语句询问键 True 是否在标题中,并且可能不在。
尝试使用if 'app_name' in request.headers and 'app_key' in request.headers'
推荐阅读
- c# - System.Windows.Window.Show() 在后台启动
- groovy - 如何在全局范围内同步 JSR223 后处理器组件中的代码块
- c# - 如何避免在不需要时解决服务?
- google-cloud-platform - 如何使用 cli 或控制台在 GCP 中列出组 ID
- arrays - 如何在 switch 语句中使用数组?
- flutter - 如何在vs代码中连接LD播放器?
- facebook - 错误不支持获取请求。ID 为 xxx 的对象不存在
- autodesk-forge - 在 Forge Viewer 中使用 BIM360 模型坐标变换位置?
- python - 如何列出可以在 seaborn 中作为关键字参数发送的所有值
- asp.net - 在 asp.net 中下载 SQL 备份文件