簡體   English   中英

如何使發布請求與 ngrok 一起使用?

[英]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 ngrokngrok.connect(5000) 繁榮,現在你有一條通往 Flask 開發服務器的隧道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM