python - 如何在 Python 中接收 Github Webhooks

标签 python github post webhooks

Github 提议发送 Post-receive hooks当您的仓库有事件时,您选择的 URL。 我想编写一个 small Python 命令行/后台(即没有 GUI 或 webapp)应用程序在我的计算机上(后来在 NAS 上)运行,它会不断地监听那些传入的 POST 请求,一旦从 Github收到 POST,它就会处理其中包含的 JSON 信息。一有json就处理它是没有问题的。 POST可以来自github给出的少量IP;我计划/希望在我的计算机上指定一个应该发送的端口。

问题是,我对 Web 技术的了解不够,无法处理您在搜索时发现的大量选项。我是否使用 Django、Requests、套接字、Flask、微框架...?我不知道所涉及的大多数术语是什么意思,而且大多数听起来好像它们提供了太多/太大而无法解决我的问题 - 我只是不知所措,不知道从哪里开始。

我能找到的大多数关于 POST/GET 的教程似乎都关注从网站发送或直接请求数据,而不是持续监听它。

我觉得这个问题并不难,一旦我知道去哪里/怎么做,就会归结为几行。任何人都可以提供指针/教程/示例/示例代码吗?

最佳答案

首先,Web 是基于请求-响应的。所以有些东西会请求你的链接,你会做出相应的回应。您的服务器应用程序将持续监听端口;您不必担心。

这里是 Flask 中的类似版本(我选择的微框架):

from flask import Flask, request
import json

app = Flask(__name__)

@app.route('/',methods=['POST'])
def foo():
   data = json.loads(request.data)
   print "New commit by: {}".format(data['commits'][0]['author']['name'])
   return "OK"

if __name__ == '__main__':
   app.run()

这是一个示例运行,使用 example from github :

运行服务器(以上代码保存在sample.py中):

burhan@lenux:~$ python sample.py 
 * Running on http://127.0.0.1:5000/

这里是对服务器的请求,基本上github会做什么:

burhan@lenux:~$ http POST http://127.0.0.1:5000 < sample.json
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
Date: Sun, 27 Jan 2013 19:07:56 GMT
Server: Werkzeug/0.8.3 Python/2.7.3

OK # <-- this is the response the client gets

这是服务器的输出:

New commit by: Chris Wanstrath
127.0.0.1 - - [27/Jan/2013 22:07:56] "POST / HTTP/1.1" 200 -

关于python - 如何在 Python 中接收 Github Webhooks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14536992/

相关文章:

python - 如何在 pydev 中启用事后调试?

Github:将不同的项目消息路由到我帐户上的不同电子邮件

javascript - 发布大数据形式 Angular JS

python - 在具有匹配属性的字典数组中查找最低值,返回最大分组

python - 基于 Pandas DataFrame 中两行之间的斜率的条件

python - 如何获取 defaultdict 中值的类型

git 根分支...它们是如何工作的?

git - 访问不同ip或host时如何指定不同的git账号?

php - $.ajax POST 在 IE8 上打开一个新窗口

c# - 通过 POST 解析