Flask对接Slack代码报错及Mac M1下ngrok命令疑问求助
问题解决方案
一、Flask对接Slack代码的错误修复
你遇到的500错误,本质是GET请求访问时,request.data为空,执行json.loads(request.data)会抛出JSON解析异常。把路由改成支持GET后,直接访问或测试GET请求时就会触发这个错误,而Slack的Challenge验证本身是POST请求。
修改方案:区分请求方法,只在POST请求时处理Slack事件,GET请求返回简单提示;同时改用request.get_json()替代json.loads(request.data),它会自动适配请求的Content-Type,且非JSON请求时返回None,避免解析报错。
修改后的代码:
import json from flask import Flask, request, make_response app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def hello_there(): # GET请求返回服务器运行提示 if request.method == 'GET': return make_response("Flask server is running", 200) # POST请求处理Slack事件 slack_event = request.get_json() if slack_event and "challenge" in slack_event: return make_response(slack_event["challenge"], 200, {"content_type": "application/json"}) return make_response("There are no slack request events", 404, {"X-Slack-No-Retry": 1}) if __name__ == '__main__': app.run(debug=True, port=5002)
二、MacBook M1终端需输入./ngrok的原因
这是因为你下载的ngrok二进制文件未添加到系统环境变量PATH中:
- 直接输入
ngrok时,系统会在PATH指定的目录(比如/usr/local/bin、/usr/bin)查找可执行文件,找不到就会报错。 - 输入
./ngrok是明确告诉系统:在当前工作目录下执行名为ngrok的可执行文件。
如果想直接用ngrok命令,只需把ngrok文件移动到PATH包含的目录里,比如执行以下命令:
sudo mv ./ngrok /usr/local/bin/
之后终端就可以直接输入ngrok执行了。
内容的提问来源于stack exchange,提问作者SejunBak
相关产品推荐
相关产品推荐

