Standardmäßig verwendet die Python 2.7-Laufzeit den URL-Abrufdienst., um ausgehende HTTP(S)-Anfragen zu verarbeiten, auch wenn Sie die urllib
-. urllib2
- oder httplib
-Python-Bibliotheken verwenden, um diese Anfragen zu stellen. Der URL-Abruf verarbeitet keine Anfragen aus der Bibliothek requests
, es sei denn, Sie aktivieren sie ausdrücklich.
Die Python 3-Laufzeit benötigt keinen Vermittlerdienst, um ausgehende Anfragen zu verarbeiten. Wenn Sie die Verwendung von URL Fetch APIs vermeiden möchten, aber ähnliche Funktionen benötigen, sollten Sie diese Anfragen migrieren, um eine Standard-Python-Bibliothek wie die requests
-Bibliothek zu verwenden.
Hauptunterschiede zwischen URL-Abruf und Python-Standardbibliotheken
Die Seite Größenbeschränkung und Kontingente für Anfragen, die mit URL-Abruf verarbeitet werden, unterscheiden sich von der Größenbeschränkung und den Kontingenten für Anfragen, die nicht vom URL-Abruf verarbeitet werden.
Wenn beim URL-Abruf eine Anfrage an eine andere App Engine-Anwendung gesendet wird, fügt URL Fetch den Anfrage-Header
X-Appengine-Inbound-Appid
hinzu, um die Identität der Anwendung zu bestätigen. Die Anwendung, die die Anfrage empfängt, kann dann anhand der Identität bestimmen, ob die Anfrage verarbeitet werden soll.Dieser Header ist nur in Anfragen verfügbar, die von Ihrer Anwendung gesendet werden, wenn URL Fetch verwendet wird. App Engine entfernt den Header, wenn Sie oder ein Drittanbieter ihn zu einer Anfrage hinzufügen.
Informationen dazu, wie Sie die Identität ohne URL-Abruf bestätigen und bestätigen, finden Sie unter App Identity zu OIDC-ID-Tokens migrieren.
Ein Beispiel für die Verwendung des Anfrageheaders zum Prüfen der Identität der aufrufenden Anwendung, wenn Anfragen zwischen App Engine-Anwendungen gesendet werden, finden Sie unter Anfragebeispiel für App Engine-zu-App Engine-Anfragen.
Sie können URL-Abruf verwenden, um ein Standard-Zeitlimit für alle Anfragen festzulegen. Die meisten Python 3-Bibliotheken wie
requests
undurllib
setzen die Standardzeitüberschreitung aufNone
. Daher sollten Sie jede Anfrage aktualisieren, die Ihr Code ausführt, um ein Zeitlimit festzulegen.
Übersicht über den Migrationsprozess
Wenn Ihre Anwendung URL Fetch APIs für Anfragen verwendet, aktualisieren Sie Ihren Code, um stattdessen eine Python-Standardbibliothek zu verwenden. Wir empfehlen, für jede Anfrage eine Zeitüberschreitung festzulegen.
Testen Sie Ihre ausgehenden Anfragen auf dem lokalen Entwicklungsserver.
Konfigurieren Sie Ihre App so, dass der URL-Abruf bei der Ausführung in App Engine umgangen wird.
Anwendung bereitstellen
URL Fetch APIs durch eine Python-Bibliothek ersetzen
Wenn Sie noch keine standardmäßige Python-Bibliothek zum Senden ausgehender Anfragen verwenden, wählen Sie eine Bibliothek aus und fügen Sie sie den Abhängigkeiten Ihrer Anwendung hinzu.
Wenn Sie beispielsweise die Bibliothek "Anfragen" verwenden möchten, erstellen Sie eine Datei
requirements.txt
in demselben Ordner wie die Dateiapp.yaml
und fügen Sie folgende Zeile hinzu:requests==2.24.0
Aus Gründen der Kompatibilität mit Python 2 empfehlen wir, die
requests
-Bibliothek an Version 2.24.0 anzuheften. Wenn Sie Ihre Anwendung bereitstellen, lädt App Engine alle Abhängigkeiten herunter, die in der Dateirequirements.txt
definiert sind.Für die lokale Entwicklung empfehlen wir, Abhängigkeiten in einer virtuellen Umgebung wie venv zu installieren.
Suchen Sie in Ihrem Code nach einer beliebigen Verwendung des Moduls
google.appengine.api.urlfetch
und aktualisieren Sie den Code so, dass er Ihre Python-Bibliothek verwendet.
Einfache HTTPS-Anfragen stellen
Das folgende Beispiel zeigt, wie Sie mithilfe der Bibliothek requests
eine Standard-HTTPS-Anfrage stellen:
Asynchrone HTTPS-Anfragen ausführen
Das folgende Beispiel zeigt, wie Sie mithilfe der requests
-Bibliothek eine asynchrone HTTPS-Anfrage stellen:
Anwendung lokal testen
Wenn Sie eine Ihrer ausgehenden Anfragen aktualisiert haben, führen Sie Ihre Anwendung auf dem lokalen Entwicklungsserver aus und prüfen Sie, ob die Anfragen erfolgreich sind.
URL-Abruf umgehen
So verhindern Sie, dass beim URL-Abruf Anfragen beim Bereitstellen der Anwendung in App Engine verarbeitet werden:
Legen Sie in der Datei
app.yaml
die UmgebungsvariableGAE_USE_SOCKETS_HTTPLIB
auf einen beliebigen Wert fest. Der Wert kann beliebig sein (auch ein leerer String). Beispiel:env_variables: GAE_USE_SOCKETS_HTTPLIB : ''
Wenn Sie den URL-Abruf zur Verarbeitung von Anfragen aktiviert haben, die aus der Bibliothek
requests
gesendet wurden, können Sie die AnfragenAppEngineAdapter
aus der Anwendung entfernen.Entfernen Sie beispielsweise
requests_toolbelt.adapters.appengine
aus Ihrerappengine_config.py
-Datei undrequests_toolbelt.adapters.appengine.monkeypatch()
aus Ihren Python-Dateien.
Selbst wenn Sie den URL-Abruf wie in den vorherigen Schritten beschrieben umgehen, kann die Anwendung weiterhin die URL Fetch API verwenden.
Anwendung bereitstellen
Sobald Sie Ihre App bereitstellen können, sollten Sie:
Testen Sie die Anwendung in App Engine.
Rufen Sie in der Google Cloud Console die Seite „App Engine-Kontingente“ auf, um zu prüfen, ob Ihre Anwendung keine URL-Abruf-API-Aufrufe durchführt.
Wenn die Anwendung fehlerfrei ausgeführt wird, verwenden Sie die Trafficaufteilung, um den Traffic für die aktualisierte Anwendung langsam hochzufahren. Prüfen Sie die Anwendung sorgfältig auf mögliche Probleme, bevor Sie mehr Traffic zur aktualisierten Anwendung leiten.