Установка и запуск CGI-прокси-сервера Python на Tomcat 7

Я хочу настроить прокси-сервер, работающий на tomcat для openlayers, поэтому я выполнил следующие шаги:

  1. Загрузили файл proxy.cgi с веб-сайта OpenLayers:

http://trac.osgeo.org/openlayers/browser/trunk/openlayers/examples/proxy.cgi

Вот код:

#!c:/Python27/python.exe """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','localhost:6901'] 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 
  1. У меня есть tomcat в порту 6901, поэтому я изменил файл proxy.cgi, чтобы включить мой домен в список allowedHosts:

    allowedHosts = ['localhost: 6901']

  2. Я скопировал файл proxy.cgi в следующую папку:

    $ TOMCAT_PATH $ / WebApps / MYAPP / WEB-INF / CGI /

  3. Изменен файл web.xml веб-приложения, добавив разделы под файлом на

    $ TOMCAT_PATH $ / WebApps / MYAPP / WEB-INF / 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>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</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>passShellEnvironment</param-name> <param-value>true</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping> 

Комментарий: «param-value» для параметра «executable» должен содержать путь к вашей установке Pyhton. (оно делает!)

  1. Изменен файл context.xml моего веб-приложения, добавив элемент ниже, файл в $TOMCAT_PATH$/webapps/myApp/META-INF/context.xml

  2. Перезапущенный Tomcat

  3. Чтобы использовать прокси с OpenLayers, эта строка включала в код:

    OpenLayers.ProxyHost = "/yourWebApp/cgi-bin/proxy.cgi?url=";

Но прокси не работает! Когда я пытаюсь использовать его как:

 /myApp/cgi-bin/proxy.cgi?url=labs.metacarta.com 

Я получаю эту ошибку:

 Some unexpected error occurred. Error text was: list index out of range 

Я думаю, что это связано с os.environ ["REQUEST_METHOD"], но я не знаю, как это связано.

    One Solution collect form web for “Установка и запуск CGI-прокси-сервера Python на Tomcat 7”

    Проблема, похоже, в вашей строке allowedHosts . Он должен включать хосты, с которыми вы хотите подключиться через прокси (например, allowedHosts = ['labs.metacarta.com'] )

    Python - лучший язык программирования в мире.