【问题标题】:.NET - downloading multiple pages from a website with a single DNS query.NET - 使用单个 DNS 查询从网站下载多个页面
【发布时间】:2011-02-11 13:21:21
【问题描述】:

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

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

【问题讨论】:

  • 第一次请求后,你怎么知道它没有缓存在 DNS 中?

标签: .net http dns httprequest resolve


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我曾尝试设置标题,但它引发了无法直接设置的异常。嗯,这个 KeepAlive 可能就是我要找的东西。问题是,我可以在创建 HttpWebRequest 对象后更改 URI 吗?
    • 或者没关系,我知道我想知道什么。谢谢你们两个:)
    猜你喜欢
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多