c# - 以编程方式更改域名解析为特定查询的 IP 地址
问题描述
为了在负载平衡系统后面的每个 Web 服务器上执行自动化的部署后测试,我想更改我的请求将发送到哪个 IP 地址,但使用相同的域名。
例如,“www.mydomain.com”通常解析为与内部地址 10.0.0.80 关联的公共地址,该地址是负载平衡器地址。
我想在它后面的 4 个 Web 服务器上执行相同的测试,所以我需要“www.mydomain.com”来解析第一个测试的 10.0.0.81,第二个测试的 10.0.0.82,等等。
我想做的是相当于更改Windows“主机”文件,但是以编程方式针对特定请求,这可能吗?
解决方案
我不这么认为。但是 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;
}
推荐阅读
- r - 使用 RCall 将数据向量从 julia 导入到 R
- python - 通过计算 numpy 中的最大值找到最佳通道
- java - 我正在尝试使用适配器膨胀我的 recyclerview 活动
- azure - Microsoft Azure 导航 - 非技术
- .net - 当属性的类型和实例是第三方包的一部分时,如何将依赖注入用于插件的属性?
- android - 从 AWS S3 下载对象以在 Android 应用程序中使用的方法?
- c# - 方法参数智能
- flutter - 如何在下拉选择后使小部件可用?
- class - 在 Kotlin 中创建类时“get”覆盖的问题
- c - 我收到此错误,但找不到正在发生的事情