Вот мертвая простая реализация прокси для Django.
from django.http import HttpResponse
import mimetypes
import urllib2
def proxy_to(request, path, target_url):
url = '%s%s' % (target_url, path)
if request.META.has_key('QUERY_STRING'):
url += '?' + request.META['QUERY_STRING']
try:
proxied_request = urllib2.urlopen(url)
status_code = proxied_request.code
mimetype = proxied_request.headers.typeheader or mimetypes.guess_type(url)
content = proxied_request.read()
except urllib2.HTTPError as e:
return HttpResponse(e.msg, status=e.code, mimetype='text/plain')
else:
return HttpResponse(content, status=status_code, mimetype=mimetype)
Это прокси-запросы от PROXY_PATH + путь к TARGET_URL + путь.
Прокси-сервер включается и настраивается путем добавления шаблона URL, подобного этому, в urls.py:
.
url(r'^PROXY_PATH/(?P<path>.*)$', proxy_to, {'target_url': 'TARGET_URL'}),
Например:
url(r'^images/(?P<path>.*)$', proxy_to, {'target_url': 'http://imageserver.com/'}),
сделает запрос на http://localhost:8000/images/logo.png извлечь и вернуть файл на http://imageserver.com/logo.png.
Строки запроса пересылаются, в то время как заголовки HTTP, такие как файлы cookie и данные POST, не передаются (это легко добавить, если вам это нужно).
Примечание: в основном предназначено для разработки. Правильный способ обработки прокси в рабочей среде - это HTTP-сервер (например, Apache или Nginx).