Firebase Cloud Function 不再接收来自 Ruby's Net:HTTP 的呼叫



问题

为什么突然之间,所有对Firebase Cloud Function网络钩子的调用在通过ruby的标准HTTP库(Net::HTTP(进行时都会超时?

背景

这工作得很好:

require 'net/http'
require 'json'
uri = URI("https://postb.in/1570228026855-4628713761921?hello=world")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
req = Net::HTTP::Post.new(uri)
req['Content-Type'] = 'application/json'
req.body = {a: 1}.to_json
http.request(req)
end

但是,同一脚本不适用于云函数 URL 代替 postb.in URL。

通过 cURL 对云函数 URL 发出相同的 POST 请求是有效的。只有当通过 ruby Net:HTTP 库制作时,它才会超时:

/usr/lib/ruby/2.5.0/net/http.rb:937:in `initialize': execution expired (Net::OpenTimeout)

在过去的几个月里,这个函数每秒被调用了很多次,来自Ruby Net:HTTP Post,没有问题。昨晚它突然停止工作。我已经在多台服务器上测试了 ruby 版本 2.3.8 和 2.5。

云函数代码为:

export const testHook = functions.https.onRequest((request, response) => {
console.log(request)
response.status(200).send('works')
})

答案最终是使用 Net::HTTP 将require 'resolv-replace'添加到 ruby 脚本中,以制作 HTTP POST。 发现这要归功于: Ruby Net::OpenTimeout: 执行已过期

为什么Net:HTTP能够解析postbin URL,但不能解析Firebase网址,以及为什么它能够成功解析Firebase网址好几个月,直到突然无法解释,我无法解释。

最新更新