Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使post请求与ngrok一起工作?_Python_Flask_Post_Request_Ngrok - Fatal编程技术网

Python 如何使post请求与ngrok一起工作?

Python 如何使post请求与ngrok一起工作?,python,flask,post,request,ngrok,Python,Flask,Post,Request,Ngrok,我正在使用python开发一个应用程序。我正在做一些测试,看看它是如何工作的 首先,我用Flask尝试了这个代码 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return 'The GET works' if __name__ == "__main__": app.run() 而且效果很好。然后,因为我希望每个人都能访问我的应用程序,所以我使用了ngrok,我只是在控制台

我正在使用python开发一个应用程序。我正在做一些测试,看看它是如何工作的

首先,我用Flask尝试了这个代码

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return 'The GET works'

if __name__ == "__main__":
    app.run()
而且效果很好。然后,因为我希望每个人都能访问我的应用程序,所以我使用了ngrok,我只是在控制台中键入:

./ngrok http 5000
它工作得很好,我可以从任何地方访问URL,但对于我的应用程序,我需要能够从任何地方发出POST请求。但每当我试图提出这样的发帖请求时

import requests
r = requests.post('http://10d2b892.ngrok.io/',data={'key':'value'})
r返回响应[405],我无法发布任何内容。 我应该怎么做才能使Post请求生效

如所述,您应该使用注释:

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

ngrok
将转发您发送的任何http请求。您的问题是Flask应用程序不是为处理post请求而编写的。在这一点上,我假设您是Flask的新手,并建议您立即切换到FastAPI:

从fastapi导入fastapi
app=FastAPI()
@app.get(“/”,状态代码=200)
def index():
返回{'message':'Hello,World!'
@app.post(“/”,状态代码=201)
def index_post():
返回{'message':'Hello,Post!'
我相信无论从短期还是长期来看,它都会让你的生活变得更轻松。如果您还使用Uvicorn运行它,您将有一个良好的开端:

从fastapi导入fastapi
进口乌维康
app=FastAPI()
@app.get(“/”,状态代码=200)
def index():
返回{'message':'Hello,World!'
@app.post(“/”,状态代码=201)
def index_post():
返回{'message':'Hello,Post!'
如果名称=“\uuuuu main\uuuuuuuu”:
乌维康(
“视图:应用程序”,
host=“localhost”,
端口=5000,
重新加载=真
)
继续并将该文件命名为
views.py

创建您的虚拟环境(venv):

python3-m-venv-venv
来源

source-venv/bin/activate
安装模块

pip安装uvicorn fastapi
然后运行它

python views.py
现在您可以使用ngrok访问它

ngrok http 5000
当您在
views.py
中保存更改时,您的uvicorn服务器将自动重新启动,您应该能够在不重新启动任何东西的情况下尝试更改


希望这能让你走起来。

你就快到了。您正在使用的注释

@app.route("/")
使用
GET
方法创建默认路由,但您正在尝试
POST
。由于您没有定义
POST
,因此得到了一个
405方法,该方法是不允许的
。要解决这个问题,只需定义
POST
,如文档所示

另外,您还可以使用
pyngrok
在Python脚本中管理
ngrok
。有一个烧瓶文档化的示例,但如果是简短的示例,您只需从pyngrok导入ngrok和ngrok.connect(5000)执行
。Boom,现在您有了到Flask dev服务器的隧道

@app.route('/', methods=['GET', 'POST'])