如何用Python实现响应HTTP GET请求并返回指定查询参数值
没问题!用Python实现这个Webhook需求很简单,我给你几个实用的方案,都不需要依赖PHP环境:
方案1:使用Flask(轻量Web框架)
Flask是Python生态里非常流行的轻量Web框架,用来实现这个需求非常快捷:
首先安装Flask:
pip install flask
然后创建一个Python脚本(比如webhook.py):
from flask import Flask, request app = Flask(__name__) @app.route('/', methods=['GET']) def handle_challenge(): # 从GET查询参数中提取challenge的值 challenge = request.args.get('challenge') # 返回纯文本响应,同时设置正确的Content-Type头 return challenge, 200, {'Content-Type': 'text/plain'} if __name__ == '__main__': # 启动服务,监听所有网卡的80端口(可根据需求修改端口) app.run(host='0.0.0.0', port=80)
启动脚本后,当收到类似GET https://your-server?challenge=8ec8d794-e0ab-42df-9017-e3dada8e84f7的请求时,就会返回对应的challenge值,和你提供的PHP脚本效果完全一致。
方案2:使用FastAPI(现代异步Web框架)
如果你偏好异步框架,FastAPI是个不错的选择,性能更好且自带文档支持:
首先安装依赖:
pip install fastapi uvicorn
创建脚本(比如webhook.py):
from fastapi import FastAPI, Request from fastapi.responses import PlainTextResponse app = FastAPI() @app.get('/', response_class=PlainTextResponse) async def handle_challenge(request: Request): # 获取查询参数中的challenge值 challenge = request.query_params.get('challenge') # 直接返回值,PlainTextResponse会自动设置Content-Type为text/plain return challenge
启动服务:
uvicorn webhook:app --host 0.0.0.0 --port 80
方案3:使用Python原生
http.server(无需额外依赖) 如果不想安装任何第三方库,可以用Python自带的http.server模块来实现:
创建脚本(比如webhook.py):
from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse, parse_qs class ChallengeRequestHandler(BaseHTTPRequestHandler): def do_GET(self): # 解析URL中的查询参数 parsed_url = urlparse(self.path) query_params = parse_qs(parsed_url.query) # 获取challenge参数,默认空字符串防止参数不存在的情况 challenge = query_params.get('challenge', [''])[0] # 设置响应状态码和头部 self.send_response(200) self.send_header('Content-Type', 'text/plain') self.end_headers() # 将challenge值编码后写入响应体 self.wfile.write(challenge.encode('utf-8')) if __name__ == '__main__': # 绑定端口80启动服务 server_address = ('', 80) httpd = HTTPServer(server_address, ChallengeRequestHandler) print('Webhook server running on port 80...') httpd.serve_forever()
直接运行这个脚本即可,不需要额外安装任何包,同样能实现你需要的功能。
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

