[英]How to make post requests work with 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 應用程序來處理發布請求。 關於這一點,我假設您是 Flask 的新手,並建議您立即切換到 FastAPI:
from fastapi import FastAPI
app = FastAPI()
@app.get('/', status_code=200)
def index():
return {'message':'Hello, World!'}
@app.post('/', status_code=201)
def index_post():
return {'message':'Hello, Post!'}
我相信從短期和長期來看,它都會讓你的生活更輕松。 如果您還使用 Uvicorn 運行它,您將有一個良好的開端:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get('/', status_code=200)
def index():
return {'message':'Hello, World!'}
@app.post('/', status_code=201)
def index_post():
return {'message':'Hello, Post!'}
if __name__ == "__main__":
uvicorn.run(
"views:app",
host="localhost",
port=5000,
reload=True
)
Go 並將該文件命名為views.py
。
創建您的虛擬環境(venv):
python3 -m venv venv
來源它
source venv/bin/activate
安裝模塊
pip install uvicorn fastapi
並運行它
python views.py
現在您可以使用 ngrok 訪問它
ngrok http 5000
當您在views.py
中保存更改時,您的 uvicorn 服務器將自動重新啟動,您應該能夠在不重新啟動任何內容的情況下嘗試您的更改。
希望這能讓你繼續前進。
您快到了。 您正在使用的注釋
@app.route("/")
使用GET
方法創建默認路由,但您正在嘗試POST
。 由於您沒有定義POST
,您會得到一個405 Method Not Allowed
。 要解決這個問題,只需定義POST
,如此處所述
@app.route('/', methods=['GET', 'POST'])
作為額外的獎勵,您還可以使用ngrok
在 Python 腳本中管理pyngrok
。 這里有一個 Flask 記錄的示例,但如果是簡短的,您只需from pyngrok import ngrok
和ngrok.connect(5000)
。 繁榮,現在你有一條通往 Flask 開發服務器的隧道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.