C # - как скачать только измененную часть HTML - PullRequest
1 голос
/ 25 июня 2009

Я использую C # + HttpWebRequest. У меня есть HTML-страница, мне нужно часто проверять наличие обновлений. Предполагая, что у меня уже есть более старая версия HTML-страницы (например, в строке), есть ли способ загрузить ТОЛЬКО «дельту» или измененную часть страницы, не загружая саму всю страницу и сравнивая ее со старой версия

Ответы [ 8 ]

2 голосов
/ 25 июня 2009

Не для любой данной страницы, нет.

Но если вы написали средство для предоставления вам различий, основанных на отметке времени или каком-либо идентификаторе, тогда да. Это не что-то стандартное. Вам нужно будет создать канал для страницы, используя синдикацию, или создать веб-сервис для удовлетворения потребностей. Конечно, вы должны контролировать веб-сервер, который хотите отслеживать, что может быть не так.

2 голосов
/ 25 июня 2009

Только если эта функциональность включена в веб-сервер, и это маловероятно. Так что нет, прости.

1 голос
/ 25 июня 2009

Set IfModifiedSince свойство HttpWebRequest.

Это не даст вам «дельту», но ответит 301, если страница вообще не была изменена.

1 голос
/ 25 июня 2009

Краткий ответ: нет. Длинный ответ заключается в том, что если HTML находится в управлении версиями, и вы пишете некоторый код на стороне сервера, который, учитывая конкретный номер версии, дает вам разницу между текущей версией и указанной версией, да. Если HTML-код не находится в управлении версиями, и вы просто хотите сравнить свою версию с текущей версией, то либо вам нужно скачать текущую версию, чтобы выполнить сравнение на клиенте, либо загрузить свою версию на сервер и сделать так, чтобы она выполняла сравнение - и отправьте разницу обратно. Очевидно, более эффективно, если ваш клиент повторно загрузит новую версию.

0 голосов
/ 28 ноября 2009

Вы можете использовать метод AddRange класса HttpWebRequest. При этом вы можете указать диапазон байтов ресурса, который вы хотите загрузить. Это также используется для продолжения прерванных загрузок http.

Это не дельта, но вы можете уменьшить трафик, если загружаете только изменяемые части.

0 голосов
/ 17 сентября 2009

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

0 голосов
/ 25 июня 2009

Как и другие ответы до меня, нет способа обойти загрузку.

Однако вы не можете проанализировать HTML, если он один и тот же, создав хеш для каждой ревизии страницы и сравнив текущий хеш с новым хешем. Тогда вы будете использовать алгоритм diff для извлечения только дельта-информации. Я думаю, что большинство современных сканеров делают что-то подобное.

0 голосов
/ 25 июня 2009

У вас старая версия, а на сервере новая версия. Как вы могли скачать только дельту, не зная, что изменилось? Как сервер может доставить дельту, не зная, какая у вас старая версия?

Очевидно, что нет возможности загрузить всю страницу целиком. Или загрузите старую версию на сервер (при условии, что на сервере есть служба, которая позволяет это), но это только увеличит трафик.

...