0

我正在使用 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 查询的“主机”标头与服务器期望的不匹配。

有没有简单的方法来解决这个问题?

4

2 回答 2

2

老实说,我怀疑 DNS 是否还没有被缓存,但是有一种方法可以满足您的要求。

使用 IP 地址创建请求后,将其上的Host属性设置为 DNS 名称。这应该可以解决您的 404 问题。

可以帮助您加快多个请求的方法是将KeepAlive属性设置为 true。这将使连接保持打开状态,并允许您发出多个请求,而无需每次都重新建立连接。

于 2010-04-23T14:29:10.477 回答
1

404 肯定是因为该站点的“主机标头” - 数千个站点可以托管在一个 IP 地址上,并且 Web 服务器使用该域来确定您想要哪个。

您的本地计算机应该缓存 DNS 查询的结果,因此即使每次访问域时它都会生成一个请求,但在第一次之后该请求甚至不会离开您的计算机,只需使用本地缓存的查找结果即可。

于 2010-04-23T14:31:03.613 回答