Страница 1 из 1

OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 16:12
dobeer
В связи с переносом своего проекта на платный хостинг, появилась проблема в работе функции GetFutureInfo (получение информации из объектов посредствам клика по ним). Проблема состоит в том, что при клике по объектам выходит ошибка "Отказано в доступе". Из документации по OpenLayersвыяснил следующее: Из соображений безопасности стандартный API XMLHTTPRequest не позволяет запрашивать информацию с других доменов. XMLHTTPRequest используется во многих классах OpenLayers [WFS, GeoRSS и т.д.]. Поэтому, чтобы запросить данные с удаленного сервера, нужно установить на вашем сервере прокси-скрипт. Пошел дальше...сделал скрипт как описано в документации, вот он (заменил свой домен на "mysite.com"):

Код: Выделить всё

#!/usr/bin/env python 
 
  
 """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 = ['http://mysite.com/', 'mysite.com', 
                 'www.mysite.com', 'http://www.mysite.com'] 
  
 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 
в свой html файл вставил строку

Код: Выделить всё

OpenLayers.ProxyHost = "http://mysite.com/cgi-bin/proxy.cgi?url=";
все как описано в документации...но так и неполучил желаемого результата...изначально выдавал ошибку "Отказано в доступе" и не показывал popap, теперь выдает пустой popap и парралельно окно с новой ошибкой "Unhandled request return Internal Server Error"
Помогите пожалуйста советом...чего, куда, что не так делаю..ПЛИИИИИЗ!!!

Re: OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 16:39
Mavka
Попробуйте сократить до:

Код: Выделить всё

OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url="; 
На какой платформе работает сервер (win/lin)?
Настройки Apache позволяют выполнять cgi?
Питон на месте?
WMS сервер какой?

Попробуйте добавить в разрешенные сайты

Код: Выделить всё

allowedHosts = ['www.openlayers.org'] 
и открыть cgi из браузера, должен загрузиться оф. сайт OL

Re: OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 16:58
wmk
По большому счету GetFutureInfo это ни что иное как подача POST запроса и ожидание его ответа.
У меня тож была такая проблемка , решил с помощью сторонней библиотеки - JQuery :)
Вот пример подачи Ajax запроса

Re: OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 17:07
dobeer
Сервер работает на Linux.
Настройки Apache позволяют выполнять cgi?...как это проверить?
Питона нет (насколько мне удалось выяснить)
WMS сервер на MapServer'е
Добавил allowedHosts = ['www.openlayers.org'] но результат тот же.
Открыть cgi из браузера, результат: выдал страницу с сообщением
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Re: OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 17:53
Mavka
Скрипт написан на python, если его нет на сервере, то работать он не будет.

Re: OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 18:29
dobeer
Есть Perl...написано что есть Apache 2.2.9, PHP...можно как нибуть обойти нехватку Питона? Хостинг находится на http://www.servmap.com хостинг я так понимаю заточен под хостинг карт на MapServer, как то же люди эту задачу решают.. :(

Re: OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 19:37
Mavka
Прокси на других языках бывают, но это нужно искать. Из того что сразу вспомнил - в Simple CSW Client используется прокси на PHP.

Re: OpenLayers-ProxyHost

Добавлено: 24 фев 2010, 19:54
dobeer
Посмотрел..в английском не силен и в PHP тоже, ничего не понял и погрустнел(((как же мне быть то теперь такому несчастному