OpenLayers-ProxyHost

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

OpenLayers-ProxyHost

Сообщение 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"
Помогите пожалуйста советом...чего, куда, что не так делаю..ПЛИИИИИЗ!!!
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers-ProxyHost

Сообщение Mavka »

Попробуйте сократить до:

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

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

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

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

allowedHosts = ['www.openlayers.org'] 
и открыть cgi из браузера, должен загрузиться оф. сайт OL
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

Re: OpenLayers-ProxyHost

Сообщение wmk »

По большому счету GetFutureInfo это ни что иное как подача POST запроса и ожидание его ответа.
У меня тож была такая проблемка , решил с помощью сторонней библиотеки - JQuery :)
Вот пример подачи Ajax запроса
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers-ProxyHost

Сообщение 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.
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers-ProxyHost

Сообщение Mavka »

Скрипт написан на python, если его нет на сервере, то работать он не будет.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers-ProxyHost

Сообщение dobeer »

Есть Perl...написано что есть Apache 2.2.9, PHP...можно как нибуть обойти нехватку Питона? Хостинг находится на http://www.servmap.com хостинг я так понимаю заточен под хостинг карт на MapServer, как то же люди эту задачу решают.. :(
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: OpenLayers-ProxyHost

Сообщение Mavka »

Прокси на других языках бывают, но это нужно искать. Из того что сразу вспомнил - в Simple CSW Client используется прокси на PHP.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
dobeer
Активный участник
Сообщения: 199
Зарегистрирован: 25 дек 2009, 21:54
Репутация: 1
Откуда: Чита
Контактная информация:

Re: OpenLayers-ProxyHost

Сообщение dobeer »

Посмотрел..в английском не силен и в PHP тоже, ничего не понял и погрустнел(((как же мне быть то теперь такому несчастному
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость