使用 HttpClient 获取时如何防止 DNS 查找

How to prevent DNS lookup when fetching by using HttpClient

我不确定我做的是否正确

keep-alive 设置为 false 时,下面的方法会阻止 DNS lookup 吗?

主持人是:tatoeba.org

url 是:http://188.213.24.161/eng/sentences/show/1

此处截图

url 给出的 以上

主机设置如下

我相信,如果您将主机指定为 IP 地址(就像您所做的那样),那么 .net 将跳过 dsn 查找(无论保持活动状态或主机 header 设置如何)。

如果您深入了解 HttpClient,您会发现它基本上使用 HttpWebRequest 来发出请求。 https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpClient.cs

HttpWebRequest 最终使用一个名为 ServicePoint 的 class,它调用一个 Dns.TryInternalResolve.

Dns.TryInternalResolve 不尝试解析 IP 地址。

更多信息请参考: https://referencesource.microsoft.com/#System/net/System/Net/DNS.cs,f8023b9c19212708

我还尝试通过 运行 以下几行来验证并使用 netmon

监视请求
using (HttpClient c = new HttpClient())
{
    var response = c.GetAsync(url).Result;
}

我看到确实对于包含主机名 .net 的 url 发出 dns 请求,而对于以 ipAddress 作为主机名的请求则没有 dns 请求。