Skip to content

Instantly share code, notes, and snippets.

@avenet
Created January 20, 2015 12:35
Show Gist options
  • Save avenet/1e14547740caacbcf525 to your computer and use it in GitHub Desktop.
Save avenet/1e14547740caacbcf525 to your computer and use it in GitHub Desktop.
import httplib
import urlparse
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
def format_header(header_name):
if header_name.startswith("HTTP_"):
header_name = header_name[5:]
header_name = header_name.lower().split("_")
return "-".join([x[0].upper() + x[1:] for x in header_name])
def forward_request(page_url=None):
@csrf_exempt
def view(request, *args, **kwargs):
http_meta_headers = request.META.items()
headers = dict([(format_header(header_name), header_value)
for header_name, header_value in http_meta_headers])
cookie_items = request.COOKIES.items()
headers["Cookie"] = "; ".join([k + "=" + v for k, v in cookie_items])
parse_result = urlparse.urlparse(page_url)
domain = parse_result.netloc
query = parse_result.query
query_string = query and "?" + query or ''
request_query_string = request.META.get('QUERY_STRING', '')
if query_string:
query_string += '&' + request_query_string
else:
query_string += '?' + request_query_string
relative_url = parse_result.path + query_string
connection = httplib.HTTPConnection(domain)
body = request.body
connection.request(request.method, relative_url, body, headers)
response = connection.getresponse()
response_content = response.read()
http_response = HttpResponse(response_content)
http_response.status_code = response.status
for k, v in response.msg.items():
http_response[k] = v
return http_response
return view
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment