简单的问题。
在 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 :(
- 如果我输入 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
- 如果我输入正确的 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/