HTTPS-Anfragen senden

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.

Hier finden Sie weitere Informationen zu Regions-IDs.

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.

In der Java-Laufzeit ausgeführte Anwendungen verwenden standardmäßig Java-Standardklassen für HTTP(S)-Anfragen, z. B. java.net.HttpURLConnection. Sie senden Anfragen wie bei jeder anderen Java-Anwendung.

Standardlaufzeit-Netzwerkklassen verwenden

Wenn Sie die Standard-Netzwerkklassen für Java verwenden, hat Ihre Anwendung Zugriff auf die folgenden Features:

  • Die Beschränkung auf 32 MB für Anfragedaten gilt nicht.
  • HTTP 2.0 wird unterstützt.
  • Alle Google Cloud-basierten APIs, die über die Cloud-Clientbibliotheken für Java zugänglich sind, werden unterstützt.

URL-Abruf verwenden

Wenn Sie URL Fetch in einer Java-Anwendung verwenden müssen, fügen Sie der Datei appengine-web.xml die folgende Zeile hinzu:

 <url-stream-handler>urlfetch</url-stream-handler>

Beispiel:

<xml version="1.0" encoding="utf-8">
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <!-- ... -->
  <url-stream-handler>urlfetch</url-stream-handler>
  <!-- ... -->
</appengine-web-app>

HTTP-Anfrage senden

Wenn Sie den URL-Abrufdienst zum Senden ausgehender HTTP(S)-Anfragen verwenden möchten, verwenden Sie java.net.URLConnection.

Das folgende Snippet veranschaulicht, wie eine grundlegende HTTP-GET-Anfrage ausgeführt wird: Die Anwendung erstellt ein neues URL-Objekt und ruft dann die openStream()-Methode des Objekts auf, um den Inhalt unter dieser URL abzurufen:

URL url = new URL("http://api.icndb.com/jokes/random");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer json = new StringBuffer();
String line;

while ((line = reader.readLine()) != null) {
  json.append(line);
}
reader.close();

Für komplexere Anfragen verwenden Sie java.net.HttpURLConnection so:

  1. Erstellen Sie ein neues URL-Objekt.
  2. Erstellen Sie ein neues URLConnection-Objekt, indem Sie die Methode openConnection() des URL-Objekts aufrufen.
  3. Erstellen Sie ein neues HttpURLConnection-Objekt, indem Sie das URLConnection-Objekt in den Objekttyp HttpURLConnection umwandeln.
  4. Legen Sie die Anfragemethode des HttpURLConnection-Objekts fest.
  5. Erstellen Sie einen Ausgabestream für den Request.
  6. Schreiben Sie die Request-Nutzlast in den Stream.
  7. Schließen Sie den Stream.

Das folgende Snippet zeigt, wie Sie mit HttpURLConnection eine komplexere Anfrage ausführen und Daten aus einem Webformular über eine PUT-Anfrage senden:

URL url = new URL("http://jsonplaceholder.typicode.com/posts/" + id);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Enable output for the connection.
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
// Set HTTP request method.
conn.setRequestMethod("PUT");

// Create JSON request.
JSONObject jsonObj =
    new JSONObject().put("userId", 1).put("id", id).put("title", text).put("body", text);

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(jsonObj.toString());
writer.close();

int respCode = conn.getResponseCode(); // New items get NOT_FOUND on PUT
if (respCode == HttpURLConnection.HTTP_OK || respCode == HttpURLConnection.HTTP_NOT_FOUND) {
  req.setAttribute("error", "");
  StringBuilder response = new StringBuilder();
  String line;

  // Read input data stream.
  BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  while ((line = reader.readLine()) != null) {
    response.append(line);
  }
  reader.close();
  req.setAttribute("response", response.toString());
} else {
  req.setAttribute("error", conn.getResponseCode() + " " + conn.getResponseMessage());
}

Zeitlimit für Anfragen festlegen

Wenn Sie URL Fetch verwenden, passen Sie die Standardfrist für Anfragen mit der Einstellung appengine.api.urlfetch.defaultDeadline in der Datei appengine-web.xml an.

Header festlegen

Wenn Sie den URL-Abruf verwenden, können Sie einen HTTP-Header für die ausgehende Anfrage festlegen, indem Sie die Methode setRequestProperty() Ihres HttpURLConnection-Objekts aufrufen. Mit dem folgenden Snippet wird der Header von X-MyApp-Version auf 2.7.3 gesetzt:

conn.setRequestProperty("X-MyApp-Version", "2.7.3");

Weiterleitungen deaktivieren

HttpURLConnection folgt standardmäßig HTTP-Weiterleitungen.

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.

Um dieses Verhalten zu deaktivieren, übergeben Sie den Wert false an die Methode setInstanceFollowRedirects() des HttpURLConnection-Objekts:

conn.setInstanceFollowRedirects(false);

Wenn die Anwendung anstatt java.net direkt das zugrunde liegende Paket urlfetch verwendet, muss in der Anwendung doNotFollowRedirects angegeben sein.

HTTPS-Anfrage senden

Standardmäßig validiert der zugrunde liegende URL-Abrufdienst das Zertifikat des Hosts, mit dem er sich verbindet, und lehnt Anfragen ab, wenn das Zertifikat nicht übereinstimmt. Sie müssen Ihre Anfrage nicht explizit sichern.

Validierung des Hostzertifikats deaktivieren

Wenn Sie die automatische Validierung des Hostzertifikats in URL Fetch deaktivieren möchten, senden Sie eine HTTPS-Anfrage mit der Klasse FetchOptions im Paket urlfetch und rufen Sie die Methode doNotValidateCertificate() auf.

Asynchrone Anfrage senden

HTTP(S)-Requests sind standardmäßig synchron. Um eine asynchrone Anfrage zu senden, muss Ihre Anwendung die Methode fetchAsync() von URLFetchService verwenden. Diese Methode gibt eine java.util.concurrent.Future<HTTPResponse> zurück.

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.