在 Fedora 中使用 Openlayers proxy.cgi

一位用户在使用 Openlayers 库时遇到问题,具体问题是当他将应用从 Windows 服务器迁移到 Fedora 服务器后,在使用 proxy.cgi 获取 geoserver 信息时,它只会返回纯文本而不是所需的内容。这是因为用户需要修改 proxy.cgi 中的部分代码才能在 Fedora 中正常运行。
在这里插入图片描述

2、解决方案

为了解决这个问题,用户需要确认 web 服务器已经配置好能够执行 .cgi 脚本。还可以考虑使用更推荐的 Python 方法,例如 WSGI 或 web 框架。

如果用户没有 root/sudo 权限访问服务器,则可以使用 wsgi2cgi 之类的工具来包装 CGI,无需 root/sudo 权限即可运行。

以下是具体步骤:

  1. 将 proxy.cgi 脚本复制到 Fedora 服务器上的合适位置。
  2. 编辑 proxy.cgi 脚本,确保以下内容:
#!/usr/bin/python -u
  1. 确保 web 服务器配置正确,可以执行 .cgi 脚本。
  2. 如果没有 root/sudo 权限访问服务器,则可以使用 wsgi2cgi 之类的工具来包装 CGI。
  3. 重新启动 web 服务器。
  4. 现在,proxy.cgi 应该能够在 Fedora 中正常运行,并可以正确地从 geoserver 获取信息。

代码例子

以下是在 Fedora 中正确运行 proxy.cgi 的代码示例:

#!/usr/bin/python -u

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
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值