merged from develop
This commit is contained in:
58
mediaserver/platformcode/controllers/proxy.py
Normal file
58
mediaserver/platformcode/controllers/proxy.py
Normal file
@@ -0,0 +1,58 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# ------------------------------------------------------------
|
||||
# Controlador para acceso indirecto a ficheros remotos
|
||||
# ------------------------------------------------------------
|
||||
import base64
|
||||
import re
|
||||
import urllib
|
||||
import urllib2
|
||||
|
||||
from controller import Controller
|
||||
|
||||
|
||||
class proxy(Controller):
|
||||
pattern = re.compile("^/proxy/")
|
||||
|
||||
def run(self, path):
|
||||
url = path.replace("/proxy/", "").split("/")[0]
|
||||
url = base64.b64decode(urllib.unquote_plus(url))
|
||||
|
||||
request_headers = self.handler.headers.dict
|
||||
|
||||
if "host" in request_headers: request_headers.pop("host")
|
||||
if "referer" in request_headers: request_headers.pop("referer")
|
||||
if "cookie" in request_headers: request_headers.pop("cookie")
|
||||
|
||||
if "|" in url:
|
||||
url_headers = dict(
|
||||
[[header.split("=")[0].lower(), urllib.unquote_plus("=".join(header.split("=")[1:]))] for header in
|
||||
url.split("|")[1].split("&")])
|
||||
url = url.split("|")[0]
|
||||
request_headers.update(url_headers)
|
||||
|
||||
req = urllib2.Request(url, headers=request_headers)
|
||||
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=0))
|
||||
|
||||
try:
|
||||
h = opener.open(req)
|
||||
except urllib2.HTTPError, e:
|
||||
h = e
|
||||
except:
|
||||
self.handler.send_response("503")
|
||||
self.handler.wfile.close()
|
||||
h.close()
|
||||
|
||||
self.handler.send_response(h.getcode())
|
||||
for header in h.info():
|
||||
self.handler.send_header(header, h.info()[header])
|
||||
|
||||
self.handler.end_headers()
|
||||
|
||||
blocksize = 1024
|
||||
bloqueleido = h.read(blocksize)
|
||||
while len(bloqueleido) > 0:
|
||||
self.handler.wfile.write(bloqueleido)
|
||||
bloqueleido = h.read(blocksize)
|
||||
|
||||
self.handler.wfile.close()
|
||||
h.close()
|
||||
Reference in New Issue
Block a user