オープンレイヤー用にTomcatで実行されるプロキシーをセットアップしたいので、次の手順に従いました。
- OpenLayersWebサイトからproxy.cgiファイルをダウンロードしました。
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
ポート6901にTomcatがあるので、proxy.cgiファイルを変更して、自分のドメインをallowedHostsリストに含めました。
allowedHosts = ['localhost:6901']
proxy.cgiファイルを次のフォルダーにコピーしました。
$ TOMCAT_PATH $ / webapps / myApp / WEB-INF / cgi /
次のファイルの下にセクションを追加して、Webアプリのファイル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>
コメント:「executable」パラメーターの「param-value」には、Pyhtonインストールへのパスが含まれている必要があります。(します!)
以下の要素を追加して、私のWebアプリのファイルcontext.xmlを変更しました。
$TOMCAT_PATH$/webapps/myApp/META-INF/context.xml
Tomcatを再起動しました
OpenLayersでプロキシーを使用するには、次の1行をコードに含めます。
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"]に関連していると思いますが、どのように関連しているかわかりません。