一、webhooks是什么

webhooks是一种实现在web api跟web service之间的发布订阅的轻量级的模式;当服务中心某个事件发生的时候,就会向订阅者发送一个POST请求形式的通知,这个POST请求中会包含事件的相关信息。

webhooks是一种与外部系统进行交互的简单的轻量级的方式,目前已经有Dropbox、Github、PayPal等很多服务提供了webhooks功能。

二、体验Github中的webhooks

在Github中,我们可以在组织机构、代码仓库、Github App上设置webhooks;当我们订阅的事件放生的时候,Github会发送一个http post请求到配置的URL,从而可以触发CI builds、更新备份镜像、部署代码等。

配置订阅web服务器

web服务器主要用于监听Github的push事件,并返回传入的json数据

from flask import Flask, request
import hashlib
import hmac app = Flask(__name__) @app.route("/push", methods=["POST"])
def push():
secret = 'github_webhooks'
from_signature = request.headers.get('X-Hub-Signature-256')
cal_signature = 'sha256=' + hmac.new(str.encode(secret), request.data, digestmod=hashlib.sha256).hexdigest()
if cal_signature == from_signature:
return 'True'
else:
return 'False'
启动web服务器
mango@mango-ubuntu:~/文档/blogs/webhook$ export FLASK_APP=hooks
mango@mango-ubuntu:~/文档/blogs/webhook$ flask run
* Serving Flask app "hooks"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

开放本地web server to internet

下载ngrok并解压之后执行,完成公网URL和本地URL的映射

ngrok http 5000

ngrok by @inconshreveable                                                                              (Ctrl+C to quit)

Session Status                online
Session Expires 1 hour, 42 minutes
Version 2.3.40
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://fde0-110-251-30-176.ngrok.io -> http://localhost:5000
Forwarding https://fde0-110-251-30-176.ngrok.io -> http://localhost:5000 Connections ttl opn rt1 rt5 p50 p90
2 0 0.00 0.00 0.01 0.01
配置webhooks

将得到的外网URL填写到Payload URL中

http://fde0-110-251-30-176.ngrok.io/push

ContentType选择 application/json

为了提高安全性,填写Secret,其他保持默认设置保存即可

测试webhooks

点击最左侧的Webhooks选项,在右边就可以看到新增的webhooks里边,点进去之后,选择上方的Recent Deliveries标签页;

在里边可以看到每次的触发记录,点进去可以看到请求和回应的header及发送的数据,当然你也可以redelivery

request header

Request URL: http://fde0-110-251-30-176.ngrok.io/push
Request method: POST
Accept: */*
content-type: application/json
User-Agent: GitHub-Hookshot/945516b
X-GitHub-Delivery: 034ea5a0-429c-11ec-9315-aa9e0e849aaa
X-GitHub-Event: ping
X-GitHub-Hook-ID: 327865514
X-GitHub-Hook-Installation-Target-ID: 357383239
X-GitHub-Hook-Installation-Target-Type: repository
X-Hub-Signature: sha1=fb0aba301c9af7463cc7e3ff7be0a1f9dccd1938
X-Hub-Signature-256: sha256=10c1e266aabfa7ce519ceb0c543988f6d19d12b16e5f336a54367682319f1111

response header

Content-Length: 6728
Content-Type: application/json
Date: Thu, 11 Nov 2021 03:06:05 GMT
Server: Werkzeug/2.0.1 Python/3.9.5

体验webhooks的更多相关文章

  1. Rio手把手教学:如何打造容器化应用程序的一站式部署体验

    11月19日,业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布Rio发布了beta版本,这是基于Kubernetes的应用程序部署引擎.它于今 ...

  2. 体验 正式发布 的OSM v1.0.0 版本

    2021年10月份发布了OSM 1.0 RC[1],在过去的几个月里,OSM 的贡献者一直在努力为 v1.0.0 版本的发布做准备.2022年2月1日,OSM 团队正式发布 1.0.0 版本[2]. ...

  3. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  4. 移动端之Android开发的几种方式的初步体验

    目前越来越多的移动端混合开发方式,下面列举的大多数我都略微的尝试过,就初步的认识写个简单的心得: 开发方式 开发环境 是否需要AndroidSDK 支持跨平台 开发语言&技能 MUI Win+ ...

  5. TODO:小程序开发过程之体验者

    TODO:小程序开发过程之体验者 1. 小程序开发过程,先下载开发者并安装开发者工具,现在腾讯开放测试了,普通用户也可以登录开发者工具,如图普通用户登录为调试类型,但是只能建立无AppID的项目 如果 ...

  6. 微信小程序体验(2):驴妈妈景区门票即买即游

    驴妈妈因为出色的运营能力,被腾讯选为首批小程序内测单位.驴妈妈的技术开发团队在很短的时间内完成了开发任务,并积极参与到张小龙团队的内测问题反馈.驴妈妈认为,移动互联网时代,微信是巨大的流量入口,也是旅 ...

  7. 一起学微软Power BI系列-使用技巧(3)Power BI安卓手机版安装与体验

    Power BI有手机版,目前支持安卓,苹果和WP,不过没有WP手机,苹果在国内还不能用,要FQ和用就不测试了.安卓的我也也是费了九牛二虎之力才把app下载下来,把方法分享给大家. FQ太麻烦,所以建 ...

  8. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  9. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

随机推荐

  1. Python-对Pcap文件进行处理,获取指定TCP流

    通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想 ...

  2. P7581-「RdOI R2」路径权值【长链剖分,dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P7581 题目大意 给出\(n\)个点的有边权有根树,\(m\)次询问一个节点\(x\)的所有\(k\)级儿子两两之 ...

  3. Hutool-Convert类型转换常见使用

    Convert 主要针对于java中常见的类型转化 java常见类型的转化 转化为字符串 public class HConvert { public static void main(String[ ...

  4. 分片利器 AutoTable:为用户带来「管家式」分片配置体验

    在<DistSQL:像数据库一样使用 Apache ShardingSphere>一文中,Committer 孟浩然为大家介绍了 DistSQL 的设计初衷和语法体系,并通过实战操作展示了 ...

  5. SpringBoot-thymeleaf-静态资源引入和接管

    引入前端 templates下放html页面 static下放css.js.image等静态资源 添加thymeleaf命名空间 <html lang="en" xmlns: ...

  6. 初学Python “登录”案例 更新!!

    更新内容:添加了登录次数,如果超过限制的次数,则提示账户被锁定,去某邮箱申请解锁账户! 此次仅把登录系统更新之后源代码放到这里,不在共享源文件在网盘了! 1 ''' 2 登录界面 3 ''' 4 5 ...

  7. noj->电子老鼠走迷宫

    00 问题 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路.电子老鼠可以在路上向上.下.左.右行走,每一步走一个格子.现给定一个起 ...

  8. 编程题:X星人的金币

    X星人的金币 时问限制:3000MS 内存限制:589824KB 题目描述: X是人在一艘海底沉船上发现了很多很多很多金币.可爱的X星人决定用这些金币来玩一个填格子的游戏.其规则如下:第1个格子放2枚 ...

  9. JBOSS未授权访问漏洞利用

    1. 环境搭建 https://www.cnblogs.com/chengNo1/p/14297387.html 搭建好vulhub平台后 进入对应漏洞目录 cd vulhub/jboss/CVE-2 ...

  10. k8s replicaset controller分析(2)-核心处理逻辑分析

    replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...