Slack incoming web hook 并让它与 HTTPPOST 一起工作

Slack incoming web hook and getting it to work with HTTPPOST

团队,我需要帮助向 Slack 发布一个简单的 Json 请求。我设置了配置并使用了 URL。他们要我添加 payload={"Text":"Some String"}

我正在使用以下代码:

HttpPost httppost = new HttpPost("slackURL");
 httppost.addHeader("Content-type", "application/json");
StringEntity params = new StringEntity("payload={\"text\" : \""+message+"\"}","UTF-8");

           params.setContentType("application/json");
            httppost.setEntity(params);

错误消息:

HTTP/1.1 500 Server Error
Response content length: -1
Chunked?: true

来自 Slack 的回复:

Our logs indicate that the content isn't being posted to the payload HTTP POST/form parameter.

改变

StringEntity params = new StringEntity("payload={\"text\" : \""+message+"\"}","UTF-8");

StringEntity params = new StringEntity("{\"text\" : \""+message+"\"}","UTF-8");

(去掉 "payload=",因为它无效 JSON。)

根据 the documentation,当 POST 到传入的 webhook 时,您有两种选择 URL:

  1. 您可以在请求正文中将数据作为 JSON 发送。
  2. 您可以发送具有 JSON 值的 payload 表单编码参数。

你正在做一些介于两者之间的事情......你声称要发送 JSON 编码的正文(通过 Content-Type: application/json)但你没有发送有效的 JSON。 (您发送的内容看起来更像是表单编码选项,但您实际上并未对其进行表单编码。)

附带说明:我强烈建议您使用真实的库来构建您的 JSON。手工操作很容易出错。例如,如果您尝试对消息 A wise man once said "You shouldn't try to encode JSON by hand." 进行编码,您将收到一个错误,因为您生成了无效的 JSON。