繁体   English   中英

在Fedora中使用Openlayers proxy.cgi吗?

[英]Using Openlayers proxy.cgi with Fedora?

我试图将我的应用程序从Windows服务器移到Fedora服务器中。 我的问题是我使用proxy.cgi从geoserver获取信息。 将proxy.cgi移入Fedora后应如何编辑?

我努力了

#!/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

您的网络服务器需要设置为执行.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)上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM