ruby - 使用 webhook 将消息发布到环聊聊天室时未经授权的 readbody=true
问题描述
试图将消息发布到hangout chat room
. 我为房间生成了一个 webhook,并在以下代码中将其用作 uri。其余的是基本的 net/http 东西。
require 'net/http'
require 'uri'
message = 'hello'
# prep and send the http request
uri = URI.parse("https://chat.googleapis.com/v1/spaces/AAAAcroWtl4/messages?key=abc&token=xyz")
request = Net::HTTP::Post.new(uri)
request.content_type = "application/json"
request.body = '"content":[{"type":"text","text":"'+message+'"}]'
req_options = { use_ssl: uri.scheme == "https" }
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
puts response.inspect
响应包含以下文本。
#<Net::HTTPUnauthorized 401 Unauthorized readbody=true>
请求正文有问题吗?
编辑:问题中的密钥和令牌已更改。
相同的代码适用于跨步房间,唯一的区别是它有
request["Authorization"] = "Bearer #{access_token}"
由于令牌已经在 uri 中,我认为这不需要。
解决方案
这对我有用
require 'net/http'
require 'uri'
require 'json'
message = 'hello'
# prep and send the http request
uri = URI.parse("//webhook")
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = "application/json"
request.body = { text: message }.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts response.inspect
推荐阅读
- amazon-web-services - 如何获取 EKS 集群的 URL?
- php - 按 ID 排序 PHP 下拉菜单,而不是按字母顺序
- soa - 编译导入的 jar 文件时出现 SOA-MDS 错误
- nlp - 创建具有部分的 Spacy Doc
- c# - wcf 客户端代理在 .net 核心 API 应用程序中应该是 Singleton 还是 Transient
- angular - 以空状态调用 NgRX 效果
- spring - 无状态应用程序是否与 formlogin 兼容?
- sql - SQL 查询:连接表中出现频率最高的值
- forms - Symfony 3:向已经提交的表单添加一个字段
- python - Python子进程包未安装