SocketError(无法打开与XXX.com:443的TCP连接(getaddrinfo:名称解析暂时失败))

时间:2019-07-04 14:09:48

标签: ruby-on-rails rest heroku port

我最近集成了腾讯的翻译API。一切在我的开发机器上都可以正常运行,但是我无法从Heroku服务器发出POST请求。

SocketError (Failed to open TCP connection to tmt.tencentcloudapi.com:443 (getaddrinfo: Temporary failure in name resolution))

我的问题是谁的问题导致了此问题? Heroku还是腾讯?

更新后带有代码:

  host = "tmt.tencentcloudapi.com"
  endpoint = "https://" + host
  uri = URI.parse(endpoint)

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  req = Net::HTTP::Post.new(endpoint, {'Content-Type' => 'application/json; charset=utf-8', 'Authorization' => authorization, 'Host' => host, 'X-TC-Action' => action, 'X-TC-Version' => version, 'X-TC-Timestamp' => timestamp.to_s, 'X-TC-Region' => region })

  req.body = params        
  res = http.request(req)

2 个答案:

答案 0 :(得分:1)

您的问题询问“谁的问题导致了此问题?”并提出两个罪魁祸首-让我提出第三个(也是可能的)罪魁祸首:中国防火墙。

Heroku在AWS上运行,有时这是中国政府提供的。 Heroku本身也可能会受到中国政府的封锁,具体取决于一天中的时间,月份,年份以及是否进行了敏感的内部政治活动。这都是很难预测的。

我确实遇到了这篇博客文章,该文章声称Heroku在中国被屏蔽: https://alexbosworth.net/post/13244162414/should-i-use-heroku

  

Heroku Apps在中国已被阻止-我住在中国,我希望这里没有被阻止的服务。预计中国将在5年内成为世界上最大的经济体,这是一个重要的市场。

鉴于DNS解析的工作方式(默认情况下未加密),Great Firewall对任何传入和传出的数据包执行DPI(深度数据包检查)。当看到返回的IP地址处于被阻止的范围内(例如Heroku的IP阻止)时,防火墙将阻止任何数据包离开中国并到达您的美国Heroku实例。

这可以解释为什么,如果所有腾讯的权威服务器都在中国, Heroku被阻止,那么您的DNS解析会失败。

答案 1 :(得分:0)

根据腾讯的API文档https://cloud.tencent.com/document/api/551/15614

我使用tmt.na-siliconvalley.tencentcloudapi.com代替tmt.tencentcloudapi.com