2013-04-19 6 views
8

Nach der Aktualisierung von 1.7.5 (wo alles gut funktioniert) bekomme ich eine HTTP Error 403: Forbidden beim Versuch, irgendwelche Websites über localhost zu öffnen. Seltsame Sache ist, dass ich so ziemlich das gleiche Setup zuhause habe wie hier bei der Arbeit und alles funktioniert dort ... Könnte ein Problem mit Proxy-Server sein, den wir bei der Arbeit benutzen, da das der einzige Unterschied ist, den ich mir vorstellen kann? Hier ist das Fehlerprotokoll erhalte ich, also, wenn jemand weiß, was los ist bitte helfen (;Dev-Server HTTP-Fehler 403: Verboten

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 - 

Auch wirft der Werfer einen Fehler beim Schließen:

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

Überprüfen Sie die Dateiberechtigungen –

+0

, die nicht geholfen haben .. Alle Dateien und Ordner haben Admin und System volle Zugriffsberechtigung. – Sasxa

+1

Ich habe alle möglichen Dinge ausprobiert, aber nichts scheint zu funktionieren. Ich habe Python und GAE auf verschiedenen Platten installiert, versuchte 64bit und 32bit Versionen, überprüfte Dateiberechtigungen ... Für jetzt habe ich GAE 1.7.5 installiert und meine Projekte arbeiten wieder, aber es wäre nett wenn jemand hatte eine Idee, wie 1.7.7 Arbeit zu machen (: – Sasxa

Antwort

4

Ich hatte dieses Problem mit meinem MacOSX bei Verwendung eines Proxy-Servers mit Google App Engine Launcher 1.8. 6. Anscheinend die Es gibt ein Problem mit "proxy_bypass" auf "urllib2.py".

Es gibt zwei mögliche Lösungen:

  1. Herunterstufung bis 1.7.5, aber die Herabstufung will?
  2. Edit "[GAE Instalattion Pfad] /google/appengine/tools/appengine_rpc.py" und suchen Sie nach der Zeile, die

    opener.add_handler(fancy_urllib.FancyProxyHandler())

In meinem Computer sagt, es war Linie 578, und dann legte eine Raute (#) am Anfang der Zeile wie folgt aus:

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

speichern Sie die Datei, beenden Sie die Anwendung neu starten. Jetzt sollte dev_appserver.py nicht versuchen, irgendeinen Proxy Server zu benutzen.

Wenn Ihre Anwendung externe Ressourcen wie einen SOAP-Webservice oder Ähnliches verwendet und Sie den Server nicht ohne den Proxy-Server erreichen können, müssen Sie ein Downgrade durchführen. Bitte beachten Sie, dass externe Javascript-Dateien (wie Facebook SDK oder ähnliches) von Ihrem Browser geladen werden, nicht von Ihrer Anwendung.

Da ich keine externen REST- oder SOAP-Dienste verwende, funktionierte es für mich!

Hoffentlich wird es auch für Sie arbeiten.

+1

Das hat für 1.8.7, danke funktioniert. – Sasxa

1

Versuchen entweder: -Accessing es über einen anderen Proxy IE Proxy in einem Proxy -Zugriff über Ihre lokale IP dh 192.168.1.1

0

Ich konfrontiert das gleiche Problem mit der Version 1.9.5. Scheint, dass der API-Proxy einige RPCs an den Proxy-Server sendet, die dann mit HTTP 403 zurückgewiesen werden (da Proxy-Server im Allgemeinen so konfiguriert sind, dass sie Verbindungsversuche zu beliebigen Ports ablehnen). In meinem Fall nutzte ich das Modul urlfetch in meiner App, um auf externe Webseiten zuzugreifen. Daher war die Deaktivierung des Proxyservers keine gute Wahl für mich.

Dies ist, wie ich das Problem einige Zeit zurück (wahrscheinlich basiert es auf Kommentare unter this issue gefunden, aber ich kann mich nicht an die genauen Quellen erinnern).

HINWEIS:

  • Für diesen Ansatz arbeiten, werden Sie den Hostnamen/IP-Adresse und Standard-Port Ihres Proxy-Servers kennen müssen, und sie im Code in geeigneter Weise ändern, wenn Sie zufällig Verbindung zu einem anderen Proxy-Server.
  • Wenn Sie sich nicht hinter dem Proxy-Server befinden, müssen Sie die angewendeten Änderungen rückgängig machen, um in einen funktionierenden Zustand zurückzukehren (wenn Sie innerhalb Ihrer App Internetzugriff haben möchten).

Hier geht es:

  1. deaktivieren Proxy-Einstellungen für die Python (Google App Engine Launcher) Umgebung, in gewisser Weise. (In meinem Fall war es einfach, da ich die dev_appserver.py von einem Terminal-Shell gestartet wurde (unter Linux) und die unset http_proxy und unset https_proxy Befehle haben den Trick.)

  2. bearbeiten {App Engine SDK root}/google/appengine/api/urlfetch_stub.py. Suchen Sie nach den Codeblock

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

    (Linien 376-379 in meinem Fall), und ersetzen Sie es mit:

    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) 
    

    die Platzhalter your_proxy_host_goes_here und your_proxy_port_number_goes_here mit den entsprechenden Werten ersetzt.

    (ich glaube, dieser Code kann elegant geschrieben werden wird, aber ... alle Python-Freaks da draußen? :))

  3. In meinem Fall musste ich auch urlfetch_stub.pyc die bestehende kompilierte Datei löschen (in das gleiche Verzeichnis wie urlfetch_stub.py), weil das SDK die Änderungen nicht übernommen hat, bis ich dies tat.

Jetzt können Sie dev_appserver benutzen, um Ihre App zu starten, und urlfetch -backed Dienste innerhalb der App verwenden, die frei von HTTP 403 Fehler.

Verwandte Themen