Как я могу написать маршрут / представление / контроллер для веб-фреймворка, который действует как тупой прокси? - PullRequest
2 голосов
/ 28 февраля 2010

То есть, скажем, я пишу что-то, что размещено на foo.com. Я бы хотел, чтобы у пользователя, который переходит на foo.com/bar.com, была возможность обслуживаться bar.com с foo.com и чтобы он мог взаимодействовать с bar.com (, например, , перейти к foo.com/bar.com/baz через указатель и щелчок). Я понимаю, что это то, что должен делать прокси. Мне нужно выполнить некоторую предварительную обработку запроса на доступ к прокси, поэтому я обращаюсь к веб-фреймворку. Я предпочитаю django, rails или sinatra или другое решение для python / ruby, но на самом деле подойдет любой.

Спасибо заранее; альтернативные предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2010

Сначала вам нужно будет проанализировать URL на foo.com. В django у вас может быть такой URL (не проверено):

url(r'(?P<url>.*)$', my_proxy_view, name = 'proxy')

Таким образом, http://foo.com/bar.com/baz/ даст вам ссылку "bar.com/baz/", которую вы можете использовать по своему усмотрению.

Затем вам нужно получить страницу на bar.com, используя такую ​​библиотеку, как urllib2.

Когда у вас есть содержимое удаленной страницы, вам нужно изменить все ссылки (элементы привязки), которые указывают на bar.com, чтобы они указывали на URL вашего прокси. Если вы хотите использовать прокси изображения, таблицы стилей и javascript, вам также необходимо изменить ссылки на них.

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


С учетом вышесказанного, это звучит как очень глупая идея. Какой у вас сценарий использования?

0 голосов
/ 28 февраля 2010

Я могу говорить только о Джанго, но ....

если вы хотите использовать один и тот же объект / данные только на нескольких сайтах, вам следует взглянуть на django sites framework

для перенаправлений я бы предложил приложение перенаправлений

или вы просто используете ярлык перенаправления в своих представлениях

...