【问题标题】:Make post request from Sinatra to Slack webhook从 Sinatra 向 Slack webhook 发出 post 请求
【发布时间】:2025-12-15 15:50:02
【问题描述】:

因此,当在我们的后端 AP 上进行特定呼叫时,我想通过我们在办公室使用的 Slack 频道发送通知,This post about sending a Slack notification when someone SSH's into your server

我尝试过 Typhoeus、Ruby 的 Net::HTTP,甚至是 Patron。它每次运行都没有错误,但通知只是没有通过。我想做一个非常基本的帖子请求。如下所示(我已经通过终端中的 curl 对相同的 Slack 通道进行了测试):

curl -XPOST 'https://hooks.slack.com/services/XXXXXXXXXX' -d ' {"text":"test"}'

对于上面提到的 gem,我参考了他们的 Git 文档,因此没有包含任何代码 sn-ps。对执行上述任务的任何帮助将不胜感激。

更新

在环顾四周后,宝石 Curb 似乎完美地为我完成了这项工作。这就是我所做的:

http = Curl.post("https://hooks.slack.com/services/XXXXXX", {:text => "bar"}.to_json)

Slack API 需要 to_json,它似乎需要 JSON 的字符串化版本。

【问题讨论】:

    标签: ruby post sinatra


    【解决方案1】:

    试试这个:

    require 'open-uri'
    require 'net/http'
    
    url = "https://hooks.slack.com/services/XXXXXXXXXX"
    uri = URI(url)
    req = Net::HTTP::Post.new(uri)
    
    req.body = "{'text':'test'}"
    res = Net::HTTP.start(uri.hostname, uri.port) do |http|
      http.request(req)
    end
    res.body # contains the response body
    

    【讨论】:

    • 感谢您的回复,迈赫迪。但是,这似乎不起作用。现在给我一个 502 Bad Gateway 错误,我服务器上的错误日志充满了一些以 EOF 结尾的错误消息行,因此甚至无法使用这些消息。
    • 5XX HTTP 代码表示服务器端有问题。 More information here
    最近更新 更多