【问题标题】:flask + ngrok - redirect doesn't workflask + ngrok - 重定向不起作用
【发布时间】:2018-04-19 05:43:37
【问题描述】:

我有以下应用:

server.py

@app.route('/')
    def main():
    return render_template('index.html')

@app.route('/login')
    def login():
    return 'hey'

index.html

<body>
 <form action="http://localhost:5000/login" , method="post">
 <input type="submit" value="submit">
</body>

现在我运行 ngrok:

ngrok http 5000

在网络浏览器中输入地址(由 ngrok 生成)后,我可以看到带有按钮的 index.html 页面,但是当我按下按钮时,它会将我重定向到 http://localhost:5000/login,我可以看到:“连接被拒绝”。 我的问题是如何设置 ngrok 和烧瓶服务器的通信方式?

附:为了更好地阅读,我只放了一部分代码

【问题讨论】:

  • 更简单的是,使用pyngrok (pip install pyngrok) 直接在您的server.py 中调用和管理ngrokHere's a full Flask example,但基本上你只需要from pyngrok import ngrok,然后在定义路由时ngrok.connect(5000)

标签: python http flask ngrok


【解决方案1】:

顺便说一句,我已经想出了如何以其他方式制作它。运行命令后:

ngrok http 5000

感谢这个 python 脚本,我得到了 ngrok 地址:

import json
import os

def get_ngrok_address():
    os.system("curl  http://localhost:4040/api/tunnels > tunnels.json")

    with open('tunnels.json') as data_file:
        datajson = json.load(data_file)

return dict(zip(['http', 'https'], [i['public_url'] for i in datajson['tunnels']]))

它只是获取json对象并将其转换为python dict:

'http' -> ngrok_http_address
'https' -> ngrok_https_address

在服务器启动之前,我将生成的地址传递给所有 html 模板例如:

<body>
  <form action="{{ ngrok_address }}/login", method="post">
  <input type="submit" value="submit">
</body>

【讨论】:

    【解决方案2】:

    如果将POST 方法添加到登录路由会发生什么

    @app.route('/login', methods=['POST'])
    def login():
        return 'hey'
    

    并将表单操作更改为

    <body>
     <form action="/login", method="post">
     <input type="submit" value="submit">
    </body>
    

    嗯?

    【讨论】:

    • 我忘了在这里写'POST',但它确实存在于我的代码中,我现在会修复它。顺便说一句,我尝试过:action="/login" 并且它有效:) 谢谢
    【解决方案3】:

    尝试更改您的应用程序主机。

    app.run(host='0.0.0.0')
    

    然后运行命令ngrok http 5000

    还为您的路线添加POST 方法。

    @app.route('/login', methods=['POST'])
    def login():
     return 'hey'
    

    【讨论】:

    • 我忘记在我的路由参数中输入“POST”,但它存在于我的代码中。您的解决方案也可以正常工作。谢谢!
    • 不错!并将答案标记为正确,谢谢!
    【解决方案4】:

    尝试Flask-PyNgrok 使用 ngrok 作为烧瓶应用程序扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2021-05-02
      • 2015-09-15
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多