【发布时间】:2018-04-16 13:58:12
【问题描述】:
我想向同一主机发送 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?
【问题讨论】:
-
我不知道在不允许不安全的 https 的情况下这是否可行(我还需要使用
--insecure与curl发出此请求),但这有效:HTTPoison.get("https://104.16.110.208/", [{"host", "www.digitalocean.com"}], hackney: [:insecure])。 -
@Dogbert thx,这是有道理的。但是我已经复制了您的确切 HTTPoison 行,对我来说它不起作用。你能告诉我它为你运行的版本吗?
-
我已经找到了如何使用 curl
https:// DOMAIN.TLD --resolve 'DOMAIN.TLD:443:IP_ADDRESS'来实现它。但我无法弄清楚如何在 Erlang/Elixir 中根据请求执行此操作。 -
你能把这个放在问题里吗?我有(几乎,但 HTTPotion 作为长生不老药库)同样的问题......基本上就像“我正在寻找相当于
curl的--resolve选项” -
尝试在
hackney中添加ssl_options,并将server_name_indication设置为www.digitalocean.com。见erlang.org/doc/man/ssl.html。问题是,如果您不提供 SNI 名称,那么它将从您在连接到服务器时使用的主机名/IP 中使用
标签: https erlang elixir httpoison