我正在使用HttpRequest从网站下载几个页面(循环中)。简化它看起来像这样:
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(
"http://sub.domain.com/something/" + someString
);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
//do something
我实际上并不十分确定,但每个请求似乎再次解析了地址(我不知道如何测试我是否正确)。 我想稍微提升一下并解析一次地址,然后将其重复用于所有请求。我无法解决如何强制HttpRequest使用它的问题。
我尝试过使用Dns.GetHostAddresses,将结果转换为字符串并将其作为地址传递给HttpWebRequest.Create。不幸的是,服务器返回错误404。我设法谷歌这可能是因为http查询的“主机”标题与服务器期望的不匹配。
有一种简单的方法可以解决这个问题吗?
答案 0 :(得分:2)
我怀疑DNS并没有被缓存,说实话,但有办法做你要求的。
使用IP地址创建请求后,将其上的Host属性设置为DNS名称。这应该可以解决你的404问题。
可以帮助您加快多个请求的一些事情是将KeepAlive属性设置为true。这将使连接保持打开状态,并允许您进行多次请求,而无需每次都重新建立连接。
答案 1 :(得分:1)
404肯定是因为该网站的“主机标题” - 数千个网站可以托管在一个IP地址,而网络服务器使用该域来确定您想要的网站。
您的本地计算机应缓存DNS查询的结果,因此即使每次访问域时它都会生成请求,但该请求在第一次之后甚至不会离开您的计算机,只需使用本地缓存查找结果。