Émettre des requêtes HTTP(S)

ID de la région

Le REGION_ID est un code abrégé que Google attribue en fonction de la région que vous sélectionnez lors de la création de votre application. Le code ne correspond pas à un pays ou une province, même si certains ID de région peuvent ressembler aux codes de pays et de province couramment utilisés. Pour les applications créées après février 2020, REGION_ID.r est inclus dans les URL App Engine. Pour les applications existantes créées avant cette date, l'ID de région est facultatif dans l'URL.

En savoir plus sur les ID de région

Cette page explique comment envoyer des requêtes HTTP(S) à partir de l'application App Engine.

App Engine passe par le service URL Fetch pour émettre des requêtes HTTP(S) sortantes. Pour en savoir plus sur les limites de taille des requêtes et les en-têtes envoyés dans une requête de récupération d'URL, consultez la page Requêtes sortantes.

Émettre une requête HTTP

Le langage PHP fournit plusieurs fonctions permettant de générer des requêtes HTTP à distance. Celles-ci sont mises en œuvre de différentes manières dans Google App Engine, et sont soumises à divers quotas et coûts :

  • Gestionnaires de flux : les gestionnaires de flux PHP http:// et https:// natifs sont configurés pour utiliser le service de récupération d'URL App Engine afin de générer des requêtes HTTP. De nombreuses fonctions PHP telles que file_get_contents() utilisent des gestionnaires de flux indirectement, et donc également le service de récupération d'URL.
  • Extension cURL : l'extension cURL utilise le service Sockets. Elle doit être activée dans le fichier php.ini de l'application et la facturation doit être activée pour le projet.
  • cURL "lite" : cURL "lite" est une version de la bibliothèque cURL fournie par Google qui utilise le service de récupération d'URL plutôt que le service Sockets. Vous devez activer cURL "lite" dans le fichier php.ini de l'application. Les méthodes suivantes de l'extension cURL ne sont pas acceptées :
    • curl_multi_* fonction
    • Protocoles non standards
    • Ports autres que 80 (HTTP) ou 443 (HTTPS)

La décision d'utiliser cURL, cURL "lite" ou des wrappers de flux dépend en grande partie de votre application et de vos préférences. En cas de doute, utilisez la bibliothèque HTTP Guzzle. Cette dernière fournit une couche d'abstraction pour les requêtes HTTP, ce qui vous permet de modifier le service sous-jacent sans réécrire le code de l'application.

Gestionnaires de flux

Les gestionnaires de flux HTTP(S) standards sont utilisés dans des fonctions PHP intégrées telles que fopen() et file_get_contents().

$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 et cURL "lite"

Activez cURL ou cURL "lite" dans le fichier php.ini afin d'utiliser les fonctions cURL pour les requêtes sortantes. cURL "lite" utilise le service de récupération d'URL, tandis que cURL utilise l'API Sockets.

$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

Par défaut, Guzzle utilise le gestionnaire de flux PHP, mais passe automatiquement à un gestionnaire cURL si cURL ou cURL "lite" est activé.

$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);

Définir un délai d'inactivité de requête

Utilisez l'option timeout dans le contexte HTTP pour modifier le délai.

Désactiver les redirections

Si vous utilisez la récupération d'URL, le service de récupération d'URL sous-jacent suit jusqu'à cinq redirections par défaut. Ces redirections peuvent transférer des informations sensibles, telles que des en-têtes d'autorisation, vers la destination de redirection. Si votre application ne nécessite pas de redirections HTTP, il est recommandé de les désactiver.

Pour indiquer au service de récupération d'URL de ne pas suivre les redirections, l'application doit définir le paramètre follow_location dans les options de contexte HTTP sur false.

Émettre une requête HTTPS

Consultez la section Émettre une requête HTTP ci-dessus.

Désactiver la validation du certificat de l'hôte

Par défaut, la mise en œuvre App Engine du wrapper HTTPS tente de valider le certificat de l'hôte et rejette les requêtes pour lesquelles le certificat ne correspond pas. Pour désactiver ce comportement, définissez la valeur de verify_peer sur false dans les options de contexte SSL/TLS.

Envoyer une requête à une autre application App Engine

Lors de l'envoi d'une requête à une autre application App Engine, celle-ci doit affirmer son identité en ajoutant l'en-tête X-Appengine-Inbound-Appid à la requête. Si vous indiquez au service de récupération d'URL de ne pas suivre les redirections, App Engine ajoutera automatiquement cet en-tête aux requêtes.

Consultez la section Désactiver les redirections pour obtenir des conseils sur la désactivation des redirections.

Étape suivante

Pour en savoir plus sur le service URL Fetch, y compris sur les en-têtes envoyés dans une requête URL Fetch, consultez la page Requêtes sortantes.