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

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

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


person aresnick    schedule 27.02.2010    source источник


Ответы (2)


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

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

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

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

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

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


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

person knutin    schedule 28.02.2010
comment
Да, это довольно глупо, я знаю. Я хотел бы настроить зеркало прокси-сервера за шлюзом аутентификации через Интернет. Я могу эмулировать браузер для прохождения аутентификации через Интернет, но я хочу, чтобы он действовал как прокси. . .so, это выглядит примерно так: [браузер пользователя] --- [мой веб-сервер] --- [веб-шлюз/форма] --- [удаленный прокси] --- [удаленный ресурс (независимо от того, что запросил пользователь)]. Я также могу решить проблему, запустив сервер в VPN или выяснив, как публично выставить SSH-туннелирование на прокси. - person aresnick; 01.03.2010
comment
См. a-we">это и это и это и это для получения подробной информации. - person aresnick; 01.03.2010

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

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

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

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

person bmaeser    schedule 28.02.2010
comment
Сайт, прокси которого я зеркалирую (bar.com), не находится под моим контролем. Я не хочу перенаправлять пользователя, я хочу, чтобы сервер загружал контент и передал его пользователю (действуя как прокси). - person aresnick; 28.02.2010