有没有办法让 Ruby HTTPI 使用 IPv6?

问题描述 投票:0回答:1

我有一个现有的测试框架,它使用 Ruby 的 HTTPI 库进行 HTTP 调用,并且我正在尝试添加 IPv6(双栈)支持的测试。 代码看起来像这样:

def http_get(request_url, request_headers)
  request = HTTPI::Request.new(request_url)
  request.headers = request_headers
  # TODO: how to I configure this to force IPv6?
  return HTTPI.get(request)
end

如果

request_url
同时支持 IPv4 和 IPv6,是否有某种方法可以强制 HTTPI 使用 IPv6 来处理请求,以便我可以验证我们的 IPv6 端点设置是否正常工作?

ruby ipv6 httpi
1个回答
0
投票

最终,任何此类测试都将通过将主机名解析为单独的 IPv4 和 IPv6 地址并尝试向它们发出请求来进行。 HTTPI 似乎没有内置此功能。

幸运的是,使用

Addrinfo
自己动手很容易。以下是如何将
www.google.com
解析为 IPv6 地址的示例。

require 'socket'

addrinfos = Addrinfo.getaddrinfo("www.google.com", 80, nil, :STREAM)
ipv4_address = addrinfos.select(&:ipv4?).first&.ip_address
ipv6_address = addrinfos.select(&:ipv6?).first&.ip_address

# => "2607:f8b0:4006:81e::2004"

如果

ipv6_address
不是
nil
(对于
www.google.com
则不是),您可以通过用
request_url
替换主机名(需要方括号)来重建您的
"[#{ipv6_address}]"
(方括号是必需的)并将其传递给您的
http_get
方法。

© www.soinside.com 2019 - 2024. All rights reserved.