运行Flask应用时浏览器访问/webhook提示Method Not Allowed是什么原因
报错根因
你代码中/webhook路由的配置为 @app.route("/webhook", methods=["POST"]),仅允许接收POST请求;而Chrome浏览器直接在地址栏输入地址访问时,默认发送的是GET请求,请求方法不匹配,因此返回405 Method Not Allowed错误。
webhook接口本身的设计用途就是接收第三方平台(如TradingView)的推送数据,这类推送默认都是用POST方法传递JSON参数,因此该路由原本就不需要支持GET请求,你直接用浏览器访问的行为本身不符合接口的设计场景。
接口测试方案
如果需要验证接口是否正常工作,可选择以下任意一种方式:
- 使用接口测试工具(Postman、Apifox等)构造POST请求,向对应地址传入符合格式的JSON参数,即可正常得到返回结果
- 直接在终端执行curl命令测试,示例如下:
curl -X POST -H "Content-Type: application/json" -d '{"ticker":"BTCUSDT","strategy":{"order_action":"buy","order_contracts":0.1,"order_price":30000}}' 你的ngrok.io地址/webhook
如果确实需要让浏览器访问/webhook时不报错,可以修改路由配置,同时兼容GET和POST请求,修改示例如下:
# 修改methods参数,新增GET支持 @app.route("/webhook", methods=["GET", "POST"]) def webhook(): # 新增GET请求的处理逻辑 if request.method == "GET": return "webhook运行正常,请通过POST方法提交数据" # 以下为原有POST请求处理逻辑,保持不变 data = request.data if data: r.publish('tradingview', data) data_dict = request.json db = get_db() cursor = db.cursor() cursor.execute(""" INSERT INTO signals (ticker, order_action, order_contracts, order_price) VALUES (?, ?, ?, ?) """, (data_dict['ticker'], data_dict['strategy']['order_action'], data_dict['strategy']['order_contracts'], data_dict['strategy']['order_price'])) db.commit() return data return { "code": "success" }
内容的提问来源于stack exchange,提问作者Scieoner
相关产品推荐
相关产品推荐

