Очистить текущий запрос и заархивировать его - PullRequest
1 голос
/ 21 июля 2009

У меня есть веб-сайт asp.net, на котором есть несколько страниц, которые я хотел бы экспортировать сгенерированный ими контент и отправить в другой сервис для архивирования.

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

Мне также интересно, следует ли нормализовать все эти местоположения, другими словами, перенаправить ссылки на тот же каталог, в котором находится основной документ.

Я могу гарантировать, что все внешние ресурсы будут расположены на одном сервере.

Это можно сделать с помощью пакета HtmlAgilityPack? Казалось, что я могу сделать много ручной работы с этой утилитой, но я собираюсь использовать ее для запроса изображений, на которые есть ссылки в таблицах стилей?

Попытка сделать какое-то открытие по этой теме при выполнении некоторых других задач.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 21 июля 2009

Самый простой способ сделать это - использовать внешнее приложение для очистки вашего сайта и преобразования всех страниц в плоские HTML-файлы. Он будет не только переходить по ссылкам, но и захватывать все файлы images / css / javascript и изменять любые ссылки на них, чтобы они были относительными. Это означает, что у вас будет папка с файлами html / css / js, которые можно просматривать локально. Приложение, которое я использовал, называется HTTrack - http://www.httrack.com/. Я обнаружил, что оно работает довольно хорошо.

0 голосов
/ 19 октября 2009

Я зарегистрировался в моем источнике на GitHub , если вы хотите посмотреть, как я это сделал.

Мое решение не идеально, но оно работает для того, что мне нужно. Некоторые проблемы могут возникнуть в сценарии нормализации. HtmlAgility Pack не испускает XHTML, только HTML, поэтому я просто использовал его, чтобы найти элементы src и href, которые я хотел заменить, а затем просто заменил найденные значения в исходном коде на нормализованные путей.

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

Спасибо

0 голосов
/ 21 июля 2009

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

Класс System.Windows.Forms.WebBrowser предназначен для встраивания браузера в форму Windows. Когда элемент управления отображает страницу, вы можете извлечь ее как растровое изображение с помощью метода DrawToBitmap ().

Если вы хотите сохранить ответ страницы в архиве, вам также придется беспокоиться о версии каждого ресурса с внешней ссылкой (изображений, файлов CSS и т. Д.), Существовавшего в то время когда был создан архив страницы. Тьфу.

Может быть, вы могли бы реализовать WebBrowser в невидимой форме, созданной службой Windows? Затем вы просто поставили бы в очередь URL каждой страницы, подлежащей архивированию, в эту службу, которая отобразит страницу и добавит растровое изображение в ваш архив.

...