我想为tomlayer设置在tomcat上运行的代理,因此我遵循以下步骤:
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
allowedHosts = [‘localhost:6901’]
$ TOMCAT_PATH $ / webapps / myApp / WEB-INF / cgi /
$ 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>
注释:“可执行”参数的“参数值”必须包含Pyhton安装的路径。(确实!)
通过添加以下元素(位于)修改了我的Web应用程序的文件context.xml $TOMCAT_PATH$/webapps/myApp/META-INF/context.xml
$TOMCAT_PATH$/webapps/myApp/META-INF/context.xml
重新启动Tomcat
要将代理与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”]相关,但我不知道它是如何相关的。
问题似乎出在您的allowedHosts行中。它应包括您要通过代理连接的主机(例如allowedHosts = ['labs.metacarta.com'])
allowedHosts
allowedHosts = ['labs.metacarta.com']