2

我想向同一主机发送 HTTPS 请求,但我想每次都选择目标 IP。

例如“dig digitalocean.com”显示这些 IP:

digitalocean.com.   300 IN  A   104.16.110.208
digitalocean.com.   300 IN  A   104.16.112.208
digitalocean.com.   300 IN  A   104.16.109.208
digitalocean.com.   300 IN  A   104.16.113.208
digitalocean.com.   300 IN  A   104.16.111.208

使用 HTTP 它可以工作:

HTTPoison.get("http://104.16.110.208/", [{"host","www.digitalocean.com"}])
{:ok,
 %HTTPoison.Response{body: "", headers: [...], request_url: "http://104.16.110.208/",
  status_code: 301}}

但是使用 HTTPS 我得到一个错误:

HTTPoison.get("https://104.16.110.208/", [{"host", "www.digitalocean.com"}])
{:error,
 %HTTPoison.Error{id: nil,
  reason: {:options, {{:server_name_indication, '104.16.110.208'}}}}}

有没有办法通过带有 HTTPoison 的 HTTPS 或在 Elixir/Erlang 中实现这一点而无需修改 etc/hosts?

4

1 回答 1

2

你需要像下面这样使用它

HTTPoison.get("https://104.16.110.208/", [{"host","www.digitalocean.com"}], hackney: [{:ssl_options, [{:server_name_indication, "digitalocean.com"}]}])

或者

HTTPoison.get("https://104.16.110.208/", [{"host","www.digitalocean.com"}], hackney: [ssl_options: [server_name_indication: 'digitalocean.com']])

由于您使用 IP 进行连接,默认情况下server_name_indication将假定为 IP。这是您需要在您的情况下覆盖的内容

在职的

于 2018-06-14T10:53:50.023 回答