HTTP(S)-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 in Ihrer App Engine-Anwendung HTTP(S)-Anfragen senden.

App Engine verwendet den URL-Abrufdienst, um ausgehende HTTP(S)-Anfragen zu senden. 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-Anfrage senden

Die PHP-Sprache bietet mehrere Funktionen zur Ausführung von HTTP-Remoteanfragen. Diese sind in Google App Engine unterschiedlich implementiert, es gelten jeweils auch unterschiedliche Kontingente und Kosten:

  • Stream-Handler: Die nativen PHP-Stream-Handler http:// und https:// sind so konfiguriert, dass sie den URL-Abrufdienst von App Engine für HTTP-Anfragen verwenden. Viele PHP-Funktionen wie file_get_contents() nutzen indirekt Stream-Handler und daher auch den URL-Abrufdienst.
  • cURL-Erweiterung: Die cURL-Erweiterung verwendet den Socket-Dienst. Die cURL-Erweiterung muss in der php.ini-Datei Ihrer Anwendung aktiviert sein. Außerdem muss die Abrechnung für Ihr Projekt aktiviert sein.
  • cURL Lite: cURL Lite ist eine von Google bereitgestellte Version der cURL-Bibliothek. Sie verwendet den URL-Abrufdienst anstelle des Socket-Dienstes. Sie müssen cURL Lite in der php.ini-Datei Ihrer Anwendung aktivieren. Die folgenden Methoden der cURL-Erweiterung werden nicht unterstützt:
    • curl_multi_* Funktionen
    • Unterstützung für Nicht-Standard-Protokolle
    • Unterstützung für andere Ports als 80 (HTTP) oder 443 (HTTPS)

Die Entscheidung, ob cURL, cURL Lite oder Stream-Wrapper verwendet werden, ist weitgehend von Ihrer Anwendung und Ihren Anforderungen abhängig. Wenn Sie sich nicht sicher sind, verwenden Sie die Guzzle HTTP-Bibliothek. Guzzle stellt eine Abstraktionsschicht für HTTP-Anfragen bereit, mit der Sie den zugrunde liegenden Dienst ändern können, ohne den Anwendungscode neu schreiben zu müssen.

Stream-Handler

Die Standard-HTTP(S)-Stream-Handler werden in integrierten PHP-Funktionen wie fopen() und file_get_contents() verwendet.

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = "accept: */*\r\n" .
    "Content-Type: application/x-www-form-urlencoded\r\n" .
    "Custom-Header: custom-value\r\n" .
    "Custom-Header-Two: custom-value-2\r\n";

$context = [
    'http' => [
        'method' => 'POST',
        'header' => $headers,
        'content' => http_build_query($data),
    ]
];
$context = stream_context_create($context);
$result = file_get_contents($url, false, $context);

cURL und cURL Lite

Aktivieren Sie cURL oder cURL Lite in der Datei "php.ini", um cURL-Funktionen für ausgehende Anfragen verwenden zu können. cURL Lite nutzt den URL-Abrufdienst und cURL die Sockets API.

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = [
    'Accept: */*',
    'Content-Type: application/x-www-form-urlencoded',
    'Custom-Header: custom-value',
    'Custom-Header-Two: custom-value-2'
];

// open connection
$ch = curl_init();

// set curl options
$options = [
    CURLOPT_URL => $url,
    CURLOPT_POST => count($data),
    CURLOPT_POSTFIELDS => http_build_query($data),
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
];
curl_setopt_array($ch, $options);

// execute
$result = curl_exec($ch);

// close connection
curl_close($ch);

Guzzle

Standardmäßig verwendet Guzzle den Stream-Handler von PHP. Wenn jedoch cURL oder cURL Lite aktiviert ist, wird automatisch ein cURL-Handler genutzt.

$url = 'http://httpbin.org/post?query=update';
$data = ['data' => 'this', 'data2' => 'that'];
$headers = [
    'Accept' => '*/*',
    'Content-Type' => 'application/x-www-form-urlencoded',
    'Custom-Header' => 'custom-value',
    'Custom-Header-Two' => 'custom-value',
];

$guzzle = new GuzzleHttp\Client;
$request = new GuzzleHttp\Psr7\Request('POST', $url, $headers, http_build_query($data));
$result = $guzzle->send($request);

Anfragezeitüberschreitung festlegen

Ändern Sie das Fristende mit der Option timeout im HTTP-Kontext.

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 der URL-Abrufdienst keinen Weiterleitungen folgt, muss der Parameter follow_location in den HTTP-Kontextoptionen auf false festgelegt werden.

HTTPS-Request senden

Siehe weiter oben der Abschnitt HTTP-Anfrage senden.

Validierung des Hostzertifikats deaktivieren

Standardmäßig überprüft die App Engine-Implementierung des HTTPS-Wrappers das Zertifikat des Hosts. Es werden dann alle Anfragen abgelehnt, bei denen das Zertifikat nicht übereinstimmt. Wenn Sie dieses Verhalten deaktivieren möchten, legen Sie den Wert von verify_peer in den SSL/TLS-Kontextoptionen auf false fest.

Anfrage an andere App Engine-Anwendungen senden

Wenn Sie eine Anfrage an eine andere App Engine-Anwendung senden, muss die Identität dieser Anwendung bestätigt werden. Geben Sie zusätzlich in die Anfrage den Header X-Appengine-Inbound-Appid ein. 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 zum URL-Abrufdienst, z. B. zu den Headern, die in einer URL-Abrufanfrage gesendet werden.