#!/Python27/python
|
|
|
"""This is a blind proxy that we use to get around browser
|
restrictions that prevent the Javascript from loading pages not on the
|
same server as the Javascript. This has several problems: it's less
|
efficient, it might break some sites, and it's a security risk because
|
people can use this proxy to browse the web and possibly do bad stuff
|
with it. It only loads pages via http and https, but it can load any
|
content type. It supports GET and POST requests."""
|
|
import urllib2
|
import cgi
|
import sys, os
|
|
# Designed to prevent Open Proxy type stuff.
|
|
allowedHosts = ['www.openlayers.org', 'openlayers.org',
|
'labs.metacarta.com', 'world.freemap.in',
|
'prototype.openmnnd.org', 'geo.openplans.org',
|
'sigma.openplans.org', 'demo.opengeo.org',
|
'www.openstreetmap.org', 'sample.azavea.com',
|
'v2.suite.opengeo.org', 'v-swe.uni-muenster.de:8080',
|
'vmap0.tiles.osgeo.org', 'www.openrouteservice.org',
|
'maps.wien.gv.at','www.ximple.com.tw','www.ximple.com.tw:80','ximple.com.tw',
|
'localhost','localhost:8080','localhost:8082']
|
|
method = os.environ["REQUEST_METHOD"]
|
|
if method == "POST":
|
qs = os.environ["QUERY_STRING"]
|
d = cgi.parse_qs(qs)
|
|
if d.has_key("url"):
|
url = d["url"][0]
|
else:
|
url = "http://www.ximple.com.tw"
|
|
print url
|
else:
|
fs = cgi.FieldStorage()
|
url = fs.getvalue('url', "http://www.ximple.com.tw")
|
|
try:
|
host = url.split("/")[2]
|
if allowedHosts and not host in allowedHosts:
|
print "Status: 502 Bad Gateway"
|
print "Content-Type: text/plain"
|
print
|
print "This proxy does not allow you to access that location (%s)." % (host,)
|
print
|
print os.environ
|
|
elif url.startswith("http://") or url.startswith("https://"):
|
|
if method == "POST":
|
length = int(os.environ["CONTENT_LENGTH"])
|
headers = {"Content-Type": os.environ["CONTENT_TYPE"]}
|
body = sys.stdin.read(length)
|
if os.environ["HTTP_AUTHORIZATION"].__len__()>0:
|
headers =headers["Authorization"]=os.environ["HTTP_AUTHORIZATION"]
|
r = urllib2.Request(url, body, headers)
|
y = urllib2.urlopen(r)
|
else:
|
y = urllib2.urlopen(url)
|
|
# print content type header
|
i = y.info()
|
if i.has_key("Content-Type"):
|
print "Content-Type: %s" % (i["Content-Type"])
|
else:
|
print "Content-Type: text/plain"
|
print
|
|
print y.read()
|
|
y.close()
|
else:
|
print "Content-Type: text/plain"
|
print
|
print "Illegal request."
|
|
except Exception, E:
|
print "Status: 500 Unexpected Error"
|
print "Content-Type: text/plain"
|
print
|
print "Some unexpected error occurred. Error text was:", E
|