HTTP-ошибка dev-сервера 403: Запрещено

После обновления с 1.7.5 (где все работало нормально) я получаю HTTP Error 403: Forbidden при попытке открыть какие-либо сайты через localhost. Странно то, что дома у меня примерно такие же настройки, как и здесь, на работе, и там все работает... Может быть проблема с прокси-сервером, который мы используем на работе, поскольку это единственная разница, о которой я могу думать? Вот журнал ошибок, который я получаю, поэтому, если кто-нибудь знает, что происходит, пожалуйста, помогите (;

Traceback (most recent call last):
  File "U:\Dev\GAE\lib\cherrypy\cherrypy\wsgiserver\wsgiserver2.py", line 1302, in communicate
    req.respond()
  File "U:\Dev\GAE\lib\cherrypy\cherrypy\wsgiserver\wsgiserver2.py", line 831, in respond
    self.server.gateway(self).respond()
  File "U:\Dev\GAE\lib\cherrypy\cherrypy\wsgiserver\wsgiserver2.py", line 2115, in respond
    response = self.req.server.wsgi_app(self.env, self.start_response)
  File "U:\Dev\GAE\google\appengine\tools\devappserver2\wsgi_server.py", line 246, in __call__
    return app(environ, start_response)
  File "U:\Dev\GAE\google\appengine\tools\devappserver2\request_rewriter.py", line 311, in _rewriter_middleware
    response_body = iter(application(environ, wrapped_start_response))
  File "U:\Dev\GAE\google\appengine\tools\devappserver2\python\request_handler.py", line 89, in __call__
    self._flush_logs(response.get('logs', []))
  File "U:\Dev\GAE\google\appengine\tools\devappserver2\python\request_handler.py", line 220, in _flush_logs
    apiproxy_stub_map.MakeSyncCall('logservice', 'Flush', request, response)
  File "U:\Dev\GAE\google\appengine\api\apiproxy_stub_map.py", line 94, in MakeSyncCall
    return stubmap.MakeSyncCall(service, call, request, response)
  File "U:\Dev\GAE\google\appengine\api\apiproxy_stub_map.py", line 320, in MakeSyncCall
    rpc.CheckSuccess()
  File "U:\Dev\GAE\google\appengine\api\apiproxy_rpc.py", line 156, in _WaitImpl
    self.request, self.response)
  File "U:\Dev\GAE\google\appengine\ext\remote_api\remote_api_stub.py", line 200, in MakeSyncCall
    self._MakeRealSyncCall(service, call, request, response)
  File "U:\Dev\GAE\google\appengine\ext\remote_api\remote_api_stub.py", line 226, in _MakeRealSyncCall
    encoded_response = self._server.Send(self._path, encoded_request)
  File "U:\Dev\GAE\google\appengine\tools\appengine_rpc.py", line 393, in Send
    f = self.opener.open(req)
  File "U:\Dev\Python\lib\urllib2.py", line 410, in open
    response = meth(req, response)
  File "U:\Dev\Python\lib\urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "U:\Dev\Python\lib\urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "U:\Dev\Python\lib\urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "U:\Dev\Python\lib\urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden
INFO     2013-04-19 12:28:52,576 server.py:561] default: "GET / HTTP/1.1" 500 -
INFO     2013-04-19 12:28:52,619 server.py:561] default: "GET /favicon.ico HTTP/1.1" 304 -

Так же лаунчер выдает ошибку при закрытии:

Traceback (most recent call last):
  File "launcher\mainframe.pyc", line 327, in OnStop
  File "launcher\taskcontroller.pyc", line 167, in Stop
  File "launcher\dev_appserver_task_thread.pyc", line 82, in stop
  File "launcher\taskthread.pyc", line 107, in stop
  File "launcher\platform.pyc", line 397, in KillProcess
pywintypes.error: (5, 'TerminateProcess', 'Access is denied.')

person Sasxa    schedule 19.04.2013    source источник
comment
проверить права доступа к файлам   -  person emcpow2    schedule 19.04.2013
comment
это не помогло .. все файлы и папки имеют полный доступ администратора и системы.   -  person Sasxa    schedule 22.04.2013
comment
Я пробовал все виды вещей, но ничего не работает. Я установил Python и GAE на разные диски, попробовал как 64-битную, так и 32-битную версии, проверил права доступа к файлам... На данный момент я установил GAE 1.7.5, и мои проекты снова работают, но было бы неплохо, если бы у кого-то был идея, как заставить работать 1.7.7 (:   -  person Sasxa    schedule 22.04.2013
comment
Друг получил ту же ошибку при попытке доступа к локальному хосту. Он также использовал прокси. Даунгрейд до 1.7.5 тоже помог ему.   -  person Anubhav C    schedule 01.05.2013
comment
Только что попробовал 1.8.0 и все еще не работает...   -  person Sasxa    schedule 20.05.2013
comment
У меня такая же проблема здесь. 1.8.0 имеет проблемы. Я даже не могу запустить самосгенерированный скелет webapp2 appengine :/   -  person Bijan    schedule 23.05.2013
comment
Возможно ли, что у вашей работы есть сайт на локальном хосте? Попробуйте изменить порт или отключиться от рабочей сети.   -  person natehome    schedule 21.06.2013
comment
Попробуйте выполнить обновление до SDK 1.7.6 и посмотрите, не возникнет ли у вас та же проблема. Причина в том, что с SDK 1.7.6 они выпустили новый «dev_appserver», возможно, что-то в нем вызывает проблему.   -  person Tombatron    schedule 20.07.2013
comment
Вы пытались запустить свое приложение из командной строки с правами администратора?   -  person Tombatron    schedule 28.07.2013
comment
добавление исполняемого разрешения в папку, содержащую необходимые файлы, должно работать   -  person scottydelta    schedule 29.07.2013


Ответы (3)


У меня была такая же проблема с моим MacOSX при использовании прокси-сервера с помощью Google App Engine Launcher 1.8.6. По-видимому, есть проблема с «proxy_bypass» в «urllib2.py».

Есть два возможных решения:

  1. Понизьте версию до 1.7.5, но кто хочет понизить версию?
  2. Отредактируйте «[путь установки GAE]/google/appengine/tools/appengine_rpc.py» и найдите строку, которая говорит

    opener.add_handler(fancy_urllib.FancyProxyHandler())

На моем компьютере это была строка 578, а затем поставить решетку (#) в начале строки, вот так:

`#opener.add_handler(fancy_urllib.FancyProxyHandler())`

Сохраните файл, остановите и перезапустите приложение. Теперь dev_appserver.py вообще не должен пытаться использовать какой-либо прокси-сервер.

Если ваше приложение использует какие-либо внешние ресурсы, такие как веб-служба SOAP или что-то в этом роде, и вы не можете получить доступ к серверу без прокси-сервера, вам придется перейти на более раннюю версию. Имейте в виду, что внешние файлы javascript (например, facebook SDK или аналогичные) загружаются из вашего браузера, а не из вашего приложения.

Поскольку я не использую какие-либо внешние службы REST или SOAP, у меня это сработало!

Надеюсь, это сработает и для вас.

person erickthered    schedule 18.10.2013

Попробуйте либо: -Доступ к нему через другой прокси. IE а . прокси внутри прокси-доступа к нему через ваш локальный IP-адрес, т.е. 192.168.1.1

person Vogon Jeltz    schedule 10.08.2013

Я столкнулся с той же проблемой с версией 1.9.5. Похоже, прокси-сервер API отправляет некоторые RPC на прокси-сервер, которые затем отклоняются с помощью HTTP 403 (поскольку прокси-серверы обычно настроены на отклонение попыток подключения к произвольным портам). В моем случае я использовал модуль urlfetch в своем приложении для доступа к внешним веб-страницам, поэтому отключение прокси-сервера не было для меня выбором.

Вот как я работал над проблемой некоторое время назад (скорее всего, это было основано на комментариях, найденных в эта проблема, но я не могу вспомнить точные источники).

ПРИМЕЧАНИЕ:

  • Чтобы этот подход работал, вам нужно знать имя хоста/IP-адрес и порт по умолчанию вашего прокси-сервера и соответствующим образом изменить их в коде, если вам случится подключиться к другому прокси-серверу.
  • Когда вы не находитесь за прокси-сервером, вам придется отменить примененные изменения, чтобы вернуться в рабочее состояние (если вы хотите получить доступ в Интернет внутри своего приложения).

Вот оно:

  1. Каким-либо образом отключите настройки прокси для среды Python (Google App Engine Launcher). (В моем случае это было легко, так как я запускал dev_appserver.py из оболочки терминала (в Linux), и команды unset http_proxy и unset https_proxy сделали свое дело.)

  2. Изменить {App Engine SDK root}/google/appengine/api/urlfetch_stub.py. Найдите блок кода

    if _CONNECTION_SUPPORTS_TIMEOUT:
        connection = connection_class(host, timeout=deadline)
    else:
        connection = connection_class(host)
    

    (строки 376-379 в моем случае) и замените его на:

    if _CONNECTION_SUPPORTS_TIMEOUT:
        if host[:9] == 'localhost' or host[:9] == '127.0.0.1':
            connection = connection_class(host, timeout=deadline)
        else:
            connection = connection_class('your_proxy_host_goes_here', your_proxy_port_number_goes_here, timeout=deadline)
    else:
        if host[:9] == 'localhost' or host[:9] == '127.0.0.1':
            connection = connection_class(host)
        else:
            connection = connection_class('your_proxy_host_goes_here', your_proxy_port_number_goes_here)
    

    заменив заполнители your_proxy_host_goes_here и your_proxy_port_number_goes_here соответствующими значениями.

    (Я считаю, что этот код может быть написан более элегантно, хотя... есть ли там фанаты Python? :))

  3. В моем случае мне также пришлось удалить существующий скомпилированный файл urlfetch_stub.pyc (расположенный в том же каталоге, что и urlfetch_stub.py), потому что SDK, похоже, не улавливал изменения, пока я этого не сделал.

Теперь вы можете использовать dev_appserver для запуска своего приложения и использовать службы, поддерживаемые urlfetch, в приложении без ошибок HTTP 403.

person Janaka Bandara    schedule 15.02.2015