Custom DNS Resolver для http.Client возможно?

Возможно ли на Go в http.Client переопределить DNS Resolver, указав свой локальный или любой другой? И если да, то как это сделать?

К примеру на Java (используя apache http client) это делается так:

DnsResolver dnsResolver = new CustomDnsResolver();
...
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(
socketFactoryRegistry, connFactory, dnsResolver);
...
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm);
  • Вопрос задан
  • 3185 просмотров
Решения вопроса 1
david_mz
@david_mz
веб-разработчик: php, javascript, go
Никогда подобного не делал, но если у вас уже есть код резолвера (который по имени выдаёт IP), то особых проблем не видно…

Как написано в https://golang.org/pkg/net/http/, “For control over proxies, TLS configuration, keep-alives, compression, and other settings, create a Transport”.

В вашем случае нужно создать экземпяр http.Transport с вашей собственной функцией Dial:
Dial func(network, addr string) (net.Conn, error)

В этой функции вы, получив хост в параметре “addr”, сами его резолвите, а потом вызываете стандартный net.Dial, но уже не с хостом, а с отрезолвленным IP-адресом. А потом делаете http.Client c этим транспортом:
client := &http.Client{Transport: tr}
и используете его как обычно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы