знать, изменена ли страница сервера или нет - PullRequest
0 голосов
/ 03 февраля 2011

Мне нужно проверить, изменил ли сервер содержимое страницы, чтобы я мог получить эту страницу снова. Я попытался использовать опции Last-Modified и ETag ответа заголовка с помощью метода httpClient. Но на многих страницах эти значения отсутствуют. Есть ли какой-либо другой способ справиться с этим в коде JAVA или любом инстументе с открытым исходным кодом, который делает это.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 03 февраля 2011

Сравнить два заголовка Content-length? Вполне вероятно, что это не будет точно так же, если страница будет изменена каким-либо образом. Не идеальное решение, но достаточно хорошее для рассматриваемых практических целей.

0 голосов
/ 03 февраля 2011

Единственный способ узнать наверняка - это найти страницу и сравнить новую версию со старой.Заголовок Last-Modified ненадежен, так как он может отсутствовать или может быть умышленно подделан некоторыми сайтами, которые не хотят, чтобы динамический контент был переиндексирован (по какой-либо причине).Заголовок длины содержимого также может отсутствовать, поэтому вы не обязательно можете полагаться на это.

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

Если вы можете сравнивать себя, вы можете просто проверить длину соответствующих документов на предмет абсолютного сходства или же извлечь соответствующие области содержимого страницы и провести сравнение текста.Для сравнения похожих страниц вы также можете использовать « sim-hash », в результате чего значения хеш-функции для похожих данных близки друг к другу (в отличие от обычного разреженного хеширования).

0 голосов
/ 03 февраля 2011

Заголовок If-Modified-Since возвращает HTTP 304, если объект не был изменен, и возвращает новый объект, если он был изменен, начиная с даты, указанной в заголовке.http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25

...