首页 > 解决方案 > 以编程方式更改域名解析为特定查询的 IP 地址

问题描述

为了在负载平衡系统后面的每个 Web 服务器上执行自动化的部署后测试,我想更改我的请求将发送到哪个 IP 地址,但使用相同的域名。

例如,“www.mydomain.com”通常解析为与内部地址 10.0.0.80 关联的公共地址,该地址是负载平衡器地址。

我想在它后面的 4 个 Web 服务器上执行相同的测试,所以我需要“www.mydomain.com”来解析第一个测试的 10.0.0.81,第二个测试的 10.0.0.82,等等。

我想做的是相当于更改Windows“主机”文件,但是以编程方式针对特定请求,这可能吗?

标签: c#automated-testsautomated-deploy

解决方案


我不这么认为。但是 IP 地址实际上并没有出现在 HTTP 请求中。它只控制在发送请求之前打开套接字的位置。默认情况下,您在 HTTP 库中将主机名用于两种不同的目的。主机被解析为一个 IP 来打开套接字,它也被复制到主机头中,这样 Web 服务器就可以在同一个端口上托管的多个站点之间进行路由。

使用 HttpWebRequest(当然是套接字),您可以将相同的 HTTP 请求发送到不同的 IP 地址。只需将 Uri 中的主机名替换为 IP 地址,并显式写入主机头即可。

就像是:

static HttpWebRequest CreateRequest(Uri requestUri, string ipAddress)
{
    var host = requestUri.Host;
    var uri = requestUri.ToString().Replace(host, ipAddress);
    HttpWebRequest req = WebRequest.CreateHttp(uri);
    req.Host = host;
    return req;
}

推荐阅读