9

1.7.5 から更新した後 (すべて正常に動作していました)、HTTP エラー 403: Forbiddenが表示されます。奇妙なことは、私が自宅で職場とほぼ同じ設定をしていて、すべてがそこで機能していることです...私が考えることができる唯一の違いなので、職場で使用しているプロキシサーバーに問題がある可能性があります? これが私が取得しているエラーログです。何が起こっているのか知っている人は助けてください(;

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

3 に答える 3

4

Google App Engine Launcher 1.8.6 を使用してプロキシ サーバーを使用しているときに、MacOSX でまったく同じ問題が発生しました。「urllib2.py」の「proxy_bypass」に問題があるようです。

考えられる解決策は 2 つあります。

  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 サービスを使用していないので、うまくいきました。

うまくいけば、それはあなたにとってもうまくいくでしょう。

于 2013-10-18T22:41:35.733 に答える
0

バージョン 1.9.5 でも同じ問題に直面しました。API プロキシがいくつかの RPC をプロキシ サーバーに送信しているように見えますが、これは HTTP 403 で拒否されています (プロキシ サーバーは通常、任意のポートへの接続試行を拒否するように構成されているため)。私の場合urlfetch、アプリでモジュールを使用して外部 Web ページにアクセスしていたため、プロキシ サーバーを無効にすることは選択できませんでした。

これは、私が以前に問題を回避した方法です (ほとんどの場合、この問題で見つかったコメントに基づいていましたが、正確な情報源は思い出せません)。

ノート:

  • このアプローチを機能させるには、プロキシ サーバーのホスト名/IP アドレスとデフォルト ポートを把握し、別のプロキシ サーバーに接続する場合にコード内でそれらを適切に変更する必要があります。
  • プロキシ サーバーの背後にいない場合は、適用された変更を元に戻して、動作状態に戻す必要があります (アプリ内でインターネット アクセスが必要な場合)。

ここに行きます:

  1. Python (Google App Engine Launcher) 環境のプロキシ設定を何らかの方法で無効にします。(私の場合は、dev_appserver.py(Linux の) ターミナル シェルからを起動していたので簡単で、 コマンド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_hereプレースホルダーをyour_proxy_port_number_goes_here適切な値に置き換えます。

    (このコードはもっとエレガントに書けると思いますが...そこにPythonオタクはいますか? :))

  3. 私の場合、既存のコンパイル済みファイルurlfetch_stub.pyc( と同じディレクトリにあるurlfetch_stub.py) も削除する必要がありました。これは、そうするまで SDK が変更を反映していないように見えたためです。

これで、 を使用dev_appserverしてアプリを起動し、urlfetchHTTP 403 エラーが発生することなく、アプリ内で でサポートされているサービスを使用できます。

于 2015-02-15T12:59:03.410 に答える