Regions-ID
REGION_ID
ist ein abgekürzter Code, den Google anhand der Region zuweist, die Sie beim Erstellen Ihrer Anwendung ausgewählt haben. Der Code bezieht sich nicht auf ein Land oder eine Provinz, auch wenn einige Regions-IDs häufig verwendeten Länder- und Provinzcodes ähneln können. Bei Anwendungen, die nach Februar 2020 erstellt wurden, ist REGION_ID.r
in den App Engine-URLs enthalten. Bei Anwendungen, die vor diesem Datum erstellt wurden, ist die Regions-ID in der URL optional.
Auf dieser Seite wird beschrieben, wie Sie mit URL Fetch für Laufzeiten der zweiten Generation HTTP(S)-Anfragen über Ihre App Engine-Anwendung ausgeben.
Bevor Sie der Anleitung auf dieser Seite folgen, sollten Sie sprachspezifische idiomatische Lösungen verwenden, um HTTP(S)-Anfragen zu senden, bevor Sie URL Fetch verwenden. Der primäre Anwendungsfall für die Verwendung von URL Fetch besteht darin, HTTP(S)-Anfragen an eine andere App Engine-Anwendung zu senden und die Identität Ihrer Anwendung über diese Anfrage zu bestätigen.
Weitere Informationen zu Größenbeschränkungen für Anfragen und dazu, welche Header in einer URL-Abrufanfrage gesendet werden, finden Sie unter Ausgehende Anfragen.
HTTP-Request senden
Wenn Sie URL Fetch zur Ausgabe ausgehender HTTP(S)-Anfragen verwenden möchten, müssen Sie explizit die urlfetch
-Bibliothek aufrufen.
Sie können eine der folgenden Bibliotheken verwenden, um eine ausgehende HTTP-Anfrage zu senden:
- Verwenden Sie für eine bessere Code-Übertragbarkeit die Python-Standardbibliothek
urllib.request
, um HTTP-Anfragen auszugeben. - Verwenden Sie eine Bibliothek eines Drittanbieters, z. B.
requests
. Rufen Sie explizit die
urlfetch
-Bibliothek auf und verwenden Sie dieurlfetch.fetch
-Methode.
urllib.request
Importieren Sie die urllib.request
-Bibliothek:
import urllib.request
Verwenden Sie dann urllib.request
, um die GET
-Anfrage auszuführen:
url = 'http://www.google.com/humans.txt'
try:
result = urllib.request.urlopen(url)
self.response.write(result.read())
except urllib.error.URLError:
logging.exception('Caught exception fetching url')
urlfetch
Die folgenden Snippets zeigen, wie Sie mit urlfetch
eine grundlegende HTTP-GET
-Anfrage ausführen. Importieren Sie zuerst die Bibliothek urlfetch
aus dem App Engine-SDK:
Verwenden Sie dann urlfetch
, um die GET
-Anfrage auszuführen:
Im folgenden Snippet wird dargestellt, wie eine komplexere Anfrage ausgeführt wird, indem Daten über eine HTTP-POST
-Anfrage mit urlfetch
aus einem Webformular gesendet werden:
Anfragezeitüberschreitung festlegen
Mit der Funktion urlfetch.set_default_fetch_deadline()
können Sie die Standardfrist anpassen. Diese Funktion speichert die neue Standardfrist in einer Thread-lokalen Variablen. Daher muss sie für jeden Request festgelegt werden, z. B. in einer benutzerdefinierten Middleware.
Weiterleitungen deaktivieren
Wenn Sie URL-Abruf verwenden, folgt der zugrunde liegende URL-Abrufdienst standardmäßig bis zu fünf Weiterleitungen. Diese Weiterleitungen können vertrauliche Informationen wie Autorisierungsheader an das Weiterleitungsziel weiterleiten. Wenn Ihre Anwendung keine HTTP-Weiterleitungen erfordert, empfehlen wir, die Weiterleitungen zu deaktivieren.
Damit URL-Abrufdienst keinen Weiterleitungen folgt, legen Sie den follow_redirects
-Parameter der fetch
-Methode auf False
fest.
HTTPS-Request senden
Um eine HTTPS-Anfrage zu senden, setzen Sie beim Aufrufen der urlfetch.fetch()
-Methode den Parameter validate_certificate
auf true
.
Asynchrone Requests senden
HTTP(S)-Requests sind standardmäßig synchron. Ihre Anwendung muss folgende Vorgänge durchführen, um einen asynchronen Request zu senden:
- Erstellen Sie ein neues RPC-Objekt mit
urlfetch.create_rpc()
. Dieses Objekt repräsentiert in nachfolgenden Methodenaufrufen asynchrone Aufrufe. - Rufen Sie
urlfetch.make_fetch_call()
auf, um die Anfrage zu senden. Diese Methode nutzt das RPC-Objekt und die URL des Anfrageziels als Parameter. - Rufen Sie die Methode
get_result()
des RPC-Objekts auf. Diese Methode gibt das Ergebnisobjekt zurück, wenn die Anfrage erfolgreich war, und löst eine Ausnahme aus, wenn bei der Anfrage ein Fehler aufgetreten ist.
Die folgenden Snippets veranschaulichen die Ausführung einer einfachen asynchronen Anfrage aus einer Python-Anwendung. Importieren Sie zuerst die Bibliothek urlfetch
aus dem App Engine-SDK:
Verwenden Sie dann urlfetch
, um die asynchrone Anfrage auszuführen:
Anfragezeitüberschreitung festlegen
Wenn Sie ein Zeitlimit für Ihre Anfrage festlegen möchten, legen Sie beim Erstellen des RPC-Objekts den Parameter deadline
der Methode urlfetch.create_rpc()
fest.
Callback-Funktion verwenden
Sie können eine Callback-Funktion für das RPC-Objekt festlegen. Die Funktion wird aufgerufen, wenn Ihre Anwendung eine Methode für das Objekt aufruft, z. B. wait()
, checksuccess()
oder get_result()
, die das Objekt wartet, bis die Anfrage abgeschlossen ist.
So verwenden Sie eine Callback-Funktion zur Verarbeitung des Ergebnisses Ihres Abrufaufrufs:
- Erstellen Sie eine Hilfsfunktion, um den Umfang des Callbacks festzulegen.
- Erstellen Sie eine Handler-Funktion, um das Ergebnis des Abrufaufrufs zu verarbeiten.
- Legen Sie das Attribut
callback
des RPC-Objekts auf die Hilfsfunktion fest.
Das folgende Snippet veranschaulicht das Aufrufen einer Callback-Funktion:
Requests an andere App Engine-Anwendungen senden
Wenn Sie URL Fetch zum Ausgeben einer Anfrage an eine andere App Engine-Anwendung verwenden, fügt die Anwendung der Anfrage den Header X-Appengine-Inbound-Appid
hinzu, um ihre Identität zu bestätigen.
Wenn Sie den URL-Abrufdienst so konfigurieren, dass er keiner Weiterleitung folgt, fügt App Engine diesen Header automatisch zu Anfragen hinzu. Informationen zum Deaktivieren von Weiterleitungen finden Sie unter Weiterleitungen deaktivieren.
Nächste Schritte
Unter Ausgehende Anfragen finden Sie weitere Informationen zu URL Fetch, z. B. zu den Headern, die in einer URL Fetch-Anfrage gesendet werden.