You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Paulo Cesar Rocha <pa...@gmail.com> on 2009/03/19 15:31:23 UTC

python proxy.cgi

Hi,
I changed tomcat web.xml  and copied the proxy.cgi python script from the OL
example directory to the /webapps//cgi-bin/ directory (I'm using Vista,
Tomcat5.5 and Geoserver). When I type the url
http://localhost:8080/cgi-bin/proxy.cgi in IE it lists openlayers proxy
instead of openlayers hompage:
  #!c:\python25\python.exe -u """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', 'localhost:8080'] 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.openlayers.org" else: fs =
cgi.FieldStorage() url = fs.getvalue('url', "http://www.openlayers.org")
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) 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


My python working (in that path) with other python scripts. Look at the DOS
display :

Microsoft Windows [versão 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. Todos os direitos reservados.
C:\Users\PauloCesar>cd \tomcat\webapps\cgi-bin
C:\tomcat\webapps\cgi-bin>proxy.cgi
Traceback (most recent call last):
  File "C:\tomcat\webapps\cgi-bin\proxy.cgi", line 23, in <module>

    method = os.environ["REQUEST_METHOD"]

  File "C:\Python25\lib\os.py", line 432, in __getitem__
    return self.data[key.upper()]
KeyError: 'REQUEST_METHOD'
C:\tomcat\webapps\cgi-bin>

to complementary my information following the web.xml:
<servlet>
        <servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
  <init-param>
          <param-name>executable</param-name>
          <param-value>C:\Python25\python.exe</param-value>
  </init-param>
        <init-param>
          <param-name>cgiPathPrefix</param-name>
          <param-value>cgi-bin</param-value>
        </init-param>
         <load-on-startup>5</load-on-startup>
    </servlet>
 <!-- The mapping for the CGI Gateway servlet -->
    <servlet-mapping>
        <servlet-name>cgi</servlet-name>
        <url-pattern>/cgi-bin/*</url-pattern>
    </servlet-mapping>
what's wrong?
Tia.