【问题标题】:Handling HTTPS post request in python flask在 python 烧瓶中处理 HTTPS 发布请求
【发布时间】:2021-07-22 10:40:49
【问题描述】:

我做了一个简单的python烧瓶程序:

   # save this as app.py
from flask import request
from flask import Flask


    
app = Flask(__name__)

@app.route("/", methods=['POST'])
def hello():
    return "Hello, World!"
    
@app.route("/sms", methods=['POST'])
def sms():
    print(request.get_json())
    return "sms world"
    
if __name__ == '__main__':
    app.run(port=443, host='0.0.0.0', ssl_context='adhoc')

这会处理 HTTP 发布请求。如何让它处理 HTTPS 发布请求?

当我执行命令 flask run 时,我得到以下信息:

  • 环境:生产 警告:这是一个开发服务器。不要在生产部署中使用它。使用生产 WSGI 服务器 反而。 * 调试模式:关闭 * 在http://127.0.0.1:5000/ 上运行 (按 CTRL+C 退出)

所以它仍然使用 HTTP 而不是 https

【问题讨论】:

    标签: python flask https


    【解决方案1】:
     pip install pyopenssl
    

    当您运行脚本时(或者如果您愿意,可以从 flask run 开始),您会注意到 Flask 表明它正在运行 https:// istance

    【讨论】:

    • 那行不通。可能是因为我的 python 目录设置为 anaconda3/bin/pythonpip install pyopenssl 表示已满足要求
    • 烧瓶运行显示以下flask run * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    【解决方案2】:

    首先使用命令安装pyopenssl

    pip install pyopenssl 
    

    要在 https 中启动它,只需添加参数:ssl_context='adhoc'

    if __name__ == '__main__':
        app.run(port=443, host='0.0.0.0', ssl_context='adhoc')
    

    启动后将显示以下消息:

    * Serving Flask app 'test' (lazy loading)
    * Environment: production
      WARNING: This is a development server. Do not use it in a production deployment.
      Use a production WSGI server instead.
    * Debug mode: off
    * Running on all addresses.
      WARNING: This is a development server. Do not use it in a production deployment.
    * Running on https://192.168.0.62:443/ (Press CTRL+C to quit)
    

    显然,一旦应用程序投入生产,将不再需要此参数,但您必须设置 wsgi 以在 https 中通信

    【讨论】:

    • 不起作用。我想我可能需要添加证书和密钥……不过我不确定……
    • 如果您按照@user16502050 的建议安装了pyopenssl,它必须工作,无需手动指定证书。你遇到了什么错误?
    • 我已经更新了 OP 中的代码。只是为了表明对我来说它仍然显示 HTTP 而不是 https。不知道这可能是什么原因,因为它似乎在你身边运行良好
    【解决方案3】:

    你可以试试 ngrok,它是一个有用的工具,可以将 HTTPS 和 HTTP 服务从本地部署到公共网络。

    https://ngrok.com/

    【讨论】:

      猜你喜欢
      • 2014-07-23
      • 1970-01-01
      • 2021-12-30
      • 2020-06-22
      • 1970-01-01
      • 2015-03-10
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多