Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отображение изображений сайта через шлюз у пользователя  (Прочитано 6101 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 08-08-2006 11:00 » 

Описываю ситуацию.
Введение:
Есть локальная сетка и есть в этой сетке шлюз в Инет. Задача такая. Разместить локальный

мини-сайт, через который все пользователи локальной сети смогут посещать некоторые

страницы сети Интернет. Получается прототип прокси.
Как решается и что на данный момент сделано:
На шлюзе установлен Апач (точнее пока там стоит пакет Денвер, но потом будет только

Апач), создано доменное имя с привязкой по АйПи шлюза.
Есть страничка index.php. Эту страничку и будет загружать локальный пользователь и через

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

информацию о погоде (по сути происходит загрузка страницы www.weather.yandex.ru).
Вот ссылка:
Код:
_<a 

href="weather_news.php?source=http://www.weather.yandex.ru&dest=.//weaher_ya.html&base=ww

w.weather.yandex.ru">Прогноз погоды_</a>
Как видно из этой ссылки, запускается скрипт РНР, которому методом GET ередается 3

параметра:
1параметр-адрес загружаемой страницы
2параметр-имя и адрес под которым будет произведено сохранение на локальный диск, 
    загружаемой страницы
3параметр-имя бзовой страницы (потом станет понятно, если до этого дойдет Улыбаюсь )
Вот код РНР-скрипта:
Код:
<?php
$source_file
=$_GET[&#39;source&#39;];
$dest_file=$_GET[&#39;dest&#39;];
$base_site=$_GET[&#39;base&#39;];
$command_file="start   SavePage.exe $source_file $dest_file $base_site";
exec($command_file);
include_once(
"header.html");
include_once(
$dest_file);
include_once(
"footer.html");
?>

Как  видно из кода РНР скрипт производит лишь запуск программы SavePage с передачей ей

параметров, дожидается конца работы программы, затем отображает в браузере файл, который

находится на локальном диске. Этот файл по сути и есть требуемая страничка с погодой.
Как становится понятно,задача программы SavePage состоит в том, чтобы по протоколу HTTP

сохранить требуемую страницу.
Возможно кто-то сейчас скажет: "а почему бы это не делать сразу из РНР скрипта". Дело в

том, что неоднократные попытки сделать отображение страницы из РНР скрипта всегда

приводили к одному и тому же результату - падению Апач, к тому же неизвестно еще до конца

какие функции будут возложены на программу SavePage и сможет ли с этим справиться РНР

скрипт.

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

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

НЕдостаток (может их и много, но меня этот беспокоит Улыбаюсь ). Дело в том, что надо

редактировать исходную страничку, надо редактировать ссылки и код для вставки

изображений, для того, чтобы ссылки были ликвидны и рисунки загружались. Я сначала

тестировал все на шлюзе и мне достаточно было изменить все относительные ссылки на

абсолютные (для этого и  требовался параметр "базовый сайт"). Т.е. я проводил поиск и

замену в тексте и в случае, если находил такое
Код:
<a href="/tune.xml"> 
то менял на
Код:
<a href="http://www.weather.yandex.ru/tune.xml">
Думаю понятно. И на шлюзе это прокатывало, рисунки отображались, переход по ссылкам был.

Стоит отметить, что я понимал, что переход по ссылкам (не на шлюзе) работать так не будет
и ссылки придется заменить на, к примеру
Код:
<a href="www.rsn.ru?source="www.weather.yandex.ru/tune.xml"&dest="..."&base="...""
Но про рисунки я не подумал Жаль.
Вот мне бы хотелось у общественности узнать, как мне поступить для решения проблемы с

отображенем изображений. Один вариант есть - это сохранять все рисунки на локальном

диске, как и ХТМЛ страницу, но мне этот вариант не по нраву, хотелось бы как-то иначе,

если это возможно. Неужели никак нельзя выкрутиться, на шлюзе же изображения

отображаются.
Надеюсь на ваш совет.
з.ы. Прошу прощения за такое ужасное назвние темы, но это лучшее что во голове сформировалось.
« Последнее редактирование: 11-12-2007 16:54 от Алексей1153++ » Записан

ещё один вопрос ...
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 08-08-2006 15:09 » 

Расскажу о решении отдалённо сходной задачи, как это предлагает Microsoft, может потом сможешь это в полезную идею преобразовать.

Имеется в недрах корпоративной сети Microsoft SQL Server Reporting Services, состоящий из БД на SQL Server и web-части на IIS, включающей web-интерфейс (для пользовательского доступа) и web-сервис (для программного доступа). Имеется intranet-приложение, которое через себя предоставляет доступ к MS SQL Server RS (т.е. выполняет функции интеллектуального прокси и реализует собственный web-интерфейс).

Возвращаемые пользователю отчёты могут идти в разных форматах, в частности в HTML. При этом диаграммы подгружаются как рисунки. С точки зрения прокси HTML и рисунки - это множество файлов, передаваемые как множество байтовых потоков от сервиса к веб-приложению.

При запросе HTML-странички отчёта MS SQL Server RS позволяет указать custom URL, который автоматически подставляется в качестве источника для картинок. Этот custom URL является URL на особую страницу прокси, которая ответственна за вывод отчёта. В твоём случае такого быть не может, поэтому не знаю что посоветовать. Парсить HTML в поиске тэгов IMG и "картичночных" стилей, а также внедрённых объектов - это, мне кажется, занятие неблагодарное, хотя это первое решение "в лоб", которое приходит в голову.

Однако вторая часть - доставка совокупности файлов пользователю - реализуется довольно просто. В сессии пользователя помимо безымянного текстового потока HTML организуются бинарные потоки картинок, каждый из которых автоматически получает уникальный идентификатор. Эти идентификаторы добавляются к custom URL в виде параметра запроса вида "&streamid=..." и браузер автоматически их запрашивает по custom URL. Там скрипт прокси-страницы определяет streamid и перенаправляет запрос web-сервису MS SQL Server RS, который, в свою очередь, открывает поток загрузки картинки. В твоём случае сохранённые картинки (подобно сохранению HTML) в виде временных файлов также могут быть распознаны либо по имени, либо по введённому уникальному идентификатору временного файла и возвращены клиенту скриптом по запросу. Т.е. одна страница возвращает файл любого формата из имеющихся временных файлов, запрошенный браузером клиента. Как их идентифицировать - на твой выбор.

Основная проблема для тебя в этом методе - как организовать подмену ссылок. MS SQL Server RS делает это самостоятельно.

Второе решение (если не сохранять картинки) - анализировать URL'ы и делать избирательный redirect на картинки. Как анализировать URL'ы - это зависит от специфики твоей задачи.
« Последнее редактирование: 11-12-2007 16:55 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines