java - 如何在 Java 中处理 Github Webhook?

标签 java github webhooks

简单的问题。

在 Github 上注册了有效负载 URL:使用 ngrok.com ( ngrok ) 链接,如 Github 文档中解释的 Webhooks:Creating Webhooks

ngrok definition: “I want to securely expose a local web server to the internet and capture all traffic for detailed inspection and replay.”


当我在正确的有效负载 URL 上从 github 发送带有有效负载的 POST 请求时,响应代码为 200,我如何处理该请求/响应并在 java 中获取有效负载 (JSON)?用servlet还是?
我不知道从哪里开始。试图搜索但没有搜索 Java :(

  1. 如果我输入 ngrok.com/something,Eclipse 控制台抛出:
    [WARN] 404 - POST/pas (127.0.0.1) 1368 字节 请求 header 主持人:....ngrok.com X-真实IP:192 .... X-Forwarded-Proto:http 连接:关闭 内容长度:5759 接受: */* 用户代理:GitHub-Hookshot/e9dfd89 X-GitHub 事件:ping X-GitHub-交付:c5493000-b67e-11e4-8199-8b09d3d66948 内容类型:application/json X-Hub-签名:sha1=b2947ce6a6de23f4274831523bae375d64e20021 响应头 连接:关闭 内容类型:text/html;charset=ISO-8859-1 缓存控制:必须重新验证、无缓存、无存储 内容长度:1368
  2. 如果我输入正确的 URL,状态为 200。Github Webhooks/Manage webhook 上的响应:
    Accept-Ranges: bytes 连接:保持 Activity 状态 内容长度:1521 内容类型:文本/html 日期:2015 年 2 月 17 日星期二 10:17:46 GMT 最后修改时间:2015 年 2 月 12 日星期四 09:06:18 GMT 服务器:nginx/1.6.2

所以问题实际上是“如何处理该负载?”

  • 在文档中他们使用 Sinatra,这是一个很大的 ?对我来说。

Sinatra 代码如下所示:
需要“西纳特拉” 需要“json” 发布“/payload”做 push = JSON.parse(request.body.read) 放“我有一些 JSON:#{push.inspect}” 结束
这是一个新问题,如果这是个愚蠢的问题,我们深表歉意。

最佳答案

已解决,我使用 HttpServlet doPost 方法来获取请求,然后从请求中获取 getReader() 并读取行,这样我就可以创建 JSONObject。我的 servlet 在 page/Payload 上,Webhook 在 http://server.com/page/Payload

public class Payload extends HttpServlet {

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    StringBuilder builder = new StringBuilder();
    String aux = "";

    while ((aux = req.getReader().readLine()) != null) {
        builder.append(aux);
    }

    String text = builder.toString();
    try {
        JSONObject json = new JSONObject(text);
        String teams_url = json.getJSONObject("repository").getString("teams_url");
        System.out.println("Teams URL:: "+teams_url);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    }}

关于java - 如何在 Java 中处理 Github Webhook?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28559645/

相关文章:

ruby-on-rails - Nanoc 在 github 中部署页面时更改基本路径

python-3.x - 通过 Webhooks 和 PubSubHubbub (Python3) 的 YouTube 推送通知在订阅时返回 200,但在视频上传时没有返回任何内容

java - 获取扩展 ASCII 十进制值

java - JGroups:发送(空,空,消息)与发送(地址,空,消息)

java - 是否有一个 Java map 实现返回最近的包含键

video - 如何在 GitHub wiki 页面上嵌入 YouTube 视频?

java - 面向对象 : new class implementing requires additional parameter

C# 使用 json.net 解析 git 提交列表

php - Bitbucket webhook 不发送负载

node.js - 为什么设置 webhook 后 telegram 不发送更新?