.NET - загрузка нескольких страниц с веб-сайта с помощью одного DNS-запроса - PullRequest
0 голосов
/ 23 апреля 2010

Я использую 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. Мне удалось Google, это, вероятно, потому что заголовок «Host» запроса http не соответствует тому, что ожидает сервер.

Есть ли простой способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Я сомневаюсь, что DNS не кешируется, если честно, но есть способ сделать то, что вы просите.

После создания запроса с IP-адресом установите Host свойство на нем DNS-имени.Это должно решить вашу проблему 404.

Что-то, что может помочь вам ускорить ваши множественные запросы, это установить для свойства KeepAlive значение true.Это будет держать соединение открытым и позволит вам делать несколько запросов без необходимости каждый раз переустанавливать соединение.

1 голос
/ 23 апреля 2010

404 определенно из-за «заголовка узла» сайта - тысячи сайтов могут быть размещены на одном IP-адресе, и веб-сервер использует домен, чтобы определить, какой из них вам нужен.

Вашлокальный компьютер должен кэшировать результаты DNS-запроса, поэтому, несмотря на то, что он будет генерировать запрос при каждом доступе к домену, он даже не покинет ваш компьютер после первого раза, просто используя результаты локального кэширования.

...