一、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. 修改CentOS ll命令显示时间格式

    临时更改显示样式,当会话结束后恢复原来的样式: export TIME_STYLE='+%Y-%m-%d %H:%M:%S' 永久改变显示样式,更改后的效果会保存下来 修改/etc/profile文件 ...

  2. Selenium自动化结合Mysql数据项目实战操作

    前言 web自动化结合Mysql做一些实战操作,今天实战的场景是通过读取web页面字段名与数据库相应的表中的字段名进行对比 - 注:商城是自己搭建在本地,小伙伴需要源码请私聊 解决思路 第一步:获取w ...

  3. vite首次启动加载慢

    背景 随着vue3的到来,vite开始被各大vue3组件库使用,公司开始一个新项目,准备尝试用vite试一波. 问题发现 当把公司新项目移植到vite后,启动非常快,但发现页渲染时间慢了很多 可以看到 ...

  4. 无法解析的外部符号之_cvLoadImage,_cvCreateMat,_cvReleaseImage之类

    一个错误可能是:附加依赖项少添加了库函数: 还有一个可能是:配置设置错误了,比如该是64位,却设置成win32了.改过来就好了. 要注意opencv的使用中 在Debug.Release模式以及x64 ...

  5. 利用水文分析方法提取山脊线和山谷线(ArcPy实现)

    一.背景 作为地形特征线的山脊线.山谷线对地形.地貌具有一定的控制作用.它们与山顶点.谷底点以及鞍部点等一起构成了地形起伏变化的骨架结构.同时由于山脊线具有分水性,山谷线具有合水性特征,使得它们在地形 ...

  6. Python笔记_1语法总结

    前言导读 本章知识点是我在最初期听python视频教程的时候整理总结的笔记 对python语法的认识对以后代码的解读有着很大的帮助. 1 新建python命名规则 新建项目名 :数字编号 项目名称 新 ...

  7. 【NXOpen.UF扩展】修改表达式

    public static class UFExpEx { /// <summary> /// 修改当前部件的表达式 /// </summary> /// <param ...

  8. 用NXOpen.CAM.CAMSetup.CopyObjects复制刻字操作

    复制刻字操作 手动时,报粘贴对象失败: 用代码执行,报内部错误: Dim destinationObject As NXOpen.CAM.CAMObject = CType(NXOpen.Utilit ...

  9. 【UE4 C++】Actor 与 Component —— 创建、销毁

    Actor的生成与销毁 创建Actor实例 UClass* TSubclassOf<T> SpawnActor() UPROPERTY(EditAnywhere, Category = & ...

  10. 【UE4 设计模式】命令模式 Command Pattern

    概述 描述 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及支持可撤销的操作. 命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务 ...