【问题标题】:dev-server HTTP Error 403: Forbidden开发服务器 HTTP 错误 403:禁止
【发布时间】:2015-02-15 20:59:03
【问题描述】:

从 1.7.5 更新后(一切正常)我在尝试通过 localhost 打开任何站点时收到 HTTP 错误 403:禁止。奇怪的是,我在家里的设置与在工作中的设置几乎相同,并且在那里一切正常……可能是我们在工作中使用的代理服务器有问题,因为这是我能想到的唯一区别?这是我得到的错误日志,所以如果有人知道发生了什么请帮助(;

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.')

【问题讨论】:

  • 检查文件权限
  • 这没有帮助..所有文件和文件夹都具有管理员和系统完全访问权限。
  • 我尝试了各种各样的方法,但没有任何接缝可以工作。我已经在不同的磁盘上安装了 Python 和 GAE,尝试了 64 位和 32 位版本,检查了文件权限……现在,我已经安装了 GAE 1.7.5,我的项目又可以工作了,但是如果有人有一个想法如何使 1.7.7 工作(:
  • 一位朋友在尝试访问 localhost 时遇到了同样的错误。他还使用了代理。降级到 1.7.5 也对他有用。
  • 刚试了1.8.0还是不行...

标签: python google-app-engine devserver


【解决方案1】:

在使用 Google App Engine Launcher 1.8.6 使用代理服务器时,我的 MacOSX 也遇到了同样的问题。显然“urllib2.py”上的“proxy_bypass”存在问题。

有两种可能的解决方案:

  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 Web 服务或类似的东西,并且您在没有代理服务器的情况下无法访问服务器,那么您将不得不降级。请记住,外部 javascript 文件(如 facebook SDK 或类似文件)是从您的浏览器加载的,而不是从您的应用程序加载的。

因为我没有使用任何外部 REST 或 SOAP 服务,所以它对我有用!

希望它也对你有用。

【讨论】:

    【解决方案2】:

    尝试: - 通过不同的代理访问它。即一个。代理中的代理 - 通过您的本地 IP 访问它,即 192.168.1.1

    【讨论】:

      【解决方案3】:

      我在 1.9.5 版中遇到了同样的问题。似乎 API 代理正在向代理服务器发送一些 RPC,然后这些 RPC 被 HTTP 403 拒绝(因为代理服务器通常配置为拒绝对任意端口的连接尝试)。就我而言,我在我的应用程序中使用 urlfetch 模块来访问外部网页,因此禁用代理服务器不是我的选择。

      这是我一段时间前解决该问题的方法(很可能是基于在this issue 下找到的 cmets,但我不记得确切的来源)。

      注意:

      • 要使这种方法起作用,您必须知道代理服务器的主机名/IP 地址和默认端口,并在您碰巧连接到不同的代理服务器时在代码中适当地更改它们。
      • 当您不在代理服务器后面时,您必须还原应用的更改才能返回工作状态(如果您希望在应用内访问互联网)。

      这里是:

      1. 以某种方式禁用 Python(Google App Engine 启动器)环境的代理设置。 (就我而言,这很容易,因为我是从终端 shell(在 Linux 上)启动 dev_appserver.py,而 unset http_proxyunset 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_hereyour_proxy_port_number_goes_here 替换为适当的值。

        (我相信这段代码可以写得更优雅,不过……那里有 Python 极客吗?:))

      3. 1234563

      现在您可以使用dev_appserver 启动您的应用,并在应用内使用urlfetch 支持的服务,而不会出现HTTP 403 错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        • 2018-01-14
        相关资源
        最近更新 更多