我正在尝试从Windows服务器将我的应用程序移动到Fedora服务器中。我的问题是我使用proxy.cgi从geoserver获取信息。 在将其移入Fedora之后,我该如何编辑proxy.cgi?
我试过了
#!/usr/bin/python
它仍然只返回纯文本。
这是我的proxy.cgi代码:
#!/usr/bin/python -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.google.co.id','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', '172.20.32.11:8080', '172.20.32.11','localhost',
'localhost:8080',
'http://192.168.64.2:8080', 'http://192.168.64.2']
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
答案 0 :(得分:1)
您的网络服务器需要设置为执行.cgi
脚本。
请参阅:http://httpd.apache.org/docs/current/howto/cgi.html
示例( Apache :);
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
我还应该指出,CGI并不是Python中推荐的方法。请考虑以下其中一项:
如下面OP的评论所述(没有sudo / root访问服务器) 您唯一的另一个选择是使用合适的Web框架构建一个简单的Web应用程序 并使用wsgi2cgi
之类的东西包装CGI以下是使用circuits.web
的示例hello.cgi:
#!/usr/bin/env python
print "Contnt-Type: text/html"
print
print "Hello World!"
cgiwrapper.py( server ):
#!/usr/bin/env python
from wsgi2cgi import CGI
from circuits.web import Server
from circuits.web.wsgi import Gateway
def app(environ, start_response):
wrapper = CGI("hello.cgi")
return wrapper.application(environ, start_response)
server = Server(("0.0.0.0", 5000))
Gateway({"/": app}).register(server)
server.run()
示例输出:
$ curl -q -o - http://localhost:5000/
Hello World!
这不需要root / sudo访问服务器; 但您只能在非托管端口上运行(> 1024)。