我最近集成了腾讯的翻译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)
答案 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