You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绕过GitHub的20个Webhook限制?Ngrok中转方案可行吗?

方案可行性分析

这个方案完全可行。GitHub Webhook支持将事件发送到公开可访问的端点,Ngrok能把本地Flask服务暴露到公网,作为中间层接收GitHub的POST请求后,转发到多个拉取代码的端点,正好可以绕过GitHub单仓库20个Webhook的限制。

你的代码问题及修正

目前的代码存在多处语法和逻辑错误,直接运行会失效,具体问题和修正后的代码如下:

代码里的问题

  • return 'Test post'放在函数最开头,导致后续所有逻辑都不会执行
  • request.get_header()是错误方法,正确获取请求头用request.headers,且后续调用时拼写错误(header应为headers)
  • 重复导入json模块
  • print(hello)中hello未定义,会触发NameError
  • requests.post的参数应为headers而非header,且未正确处理请求体和签名头

修正后的代码

from flask import Flask, request, jsonify
import requests

app = Flask(__name__)

# 配置需要转发的多个端点
TARGET_ENDPOINTS = [
    "https://XXX:8443/modules/git/public/web-hook.php?uuid=1e51f92e-b17e-42df-638d-f",
    # 可以添加更多端点
]

@app.route("/webhook", methods=['GET', 'POST'])
def webhook():
    # 处理GitHub的GET验证请求(可选,部分场景需要)
    if request.method == 'GET':
        return 'Webhook receiver is running', 200
    
    # 获取GitHub发送的请求体和头信息
    try:
        payload = request.get_json()
        # 保留关键请求头,尤其是GitHub的签名头用于端点验证
        forward_headers = {
            'Content-Type': 'application/json',
            'X-Hub-Signature-256': request.headers.get('X-Hub-Signature-256'),
            'X-GitHub-Event': request.headers.get('X-GitHub-Event')
        }
        
        # 转发到所有目标端点
        for endpoint in TARGET_ENDPOINTS:
            response = requests.post(
                endpoint,
                json=payload,  # 直接传json,无需手动dumps
                headers=forward_headers
            )
            # 可选:打印转发结果用于调试
            print(f"转发到 {endpoint} 状态码: {response.status_code}")
        
        return jsonify({"status": "success", "message": "已转发到所有端点"}), 200
    
    except Exception as e:
        print(f"转发出错: {str(e)}")
        return jsonify({"status": "error", "message": str(e)}), 500

if __name__ == '__main__':
    # 生产环境建议关闭debug,指定端口并启用SSL(如果需要)
    app.run(debug=True, port=5000)
额外建议
  • 验证GitHub签名:在接收请求时,用GitHub提供的Webhook密钥验证X-Hub-Signature-256头,避免处理恶意请求
  • 异步转发:如果目标端点较多,同步转发会导致响应延迟,GitHub可能重复触发Webhook。可以用threading或celery实现异步转发
  • 日志记录:添加详细的日志记录,方便排查转发失败的问题
  • 生产环境部署:不要用app.run(debug=True)部署到生产环境,改用Gunicorn或UWSGI等WSGI服务器,配合Ngrok稳定运行

内容的提问来源于stack exchange,提问作者Cazeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:01:04