簡體   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