Invio di richieste HTTP(S)

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base alla regione selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Questa pagina descrive come inviare richieste HTTP(S) dalla tua app App Engine.

App Engine utilizza il servizio di recupero URL per inviare richieste HTTP(S) in uscita. Per informazioni dettagliate sui limiti di dimensione delle richieste e sulle intestazioni inviate in una richiesta di recupero URL, consulta Richieste in uscita.

Invio di una richiesta HTTP

Il linguaggio PHP fornisce diverse funzioni per effettuare richieste HTTP remote. Questi sono implementati in modi diversi in Google App Engine e sono soggetti a quote e costi diversi:

  • Gestione degli stream: i gestori degli stream PHP nativi http:// e https:// sono configurati per utilizzare il servizio di recupero dell'URL di App Engine per effettuare richieste HTTP. Molte funzioni PHP, come file_get_contents(), utilizzano indirettamente gli handler stream e, di conseguenza, anche il servizio di recupero dell'URL.
  • Estensione cURL: l'estensione cURL utilizza il servizio Sockets. L'estensione cURL deve essere attivata nel file php.ini della tua applicazione e la fatturazione deve essere attivata per il tuo progetto.
  • cURL "lite": cURL "lite" è una versione della libreria cURL fornita da Google che utilizza il servizio di recupero dell'URL anziché il servizio Sockets. Devi attivare cURL "lite" nel file php.ini della tua applicazione. I seguenti metodi dell'estensione cURL non sono supportati:
    • curl_multi_* funzioni
    • Supporto per protocolli non standard
    • Supporto di porte diverse da 80 (HTTP) o 443 (HTTPS)

La decisione se utilizzare cURL, cURL Lite o wrapper per stream dipende in gran parte dalla tua applicazione e dalle tue preferenze. In caso di dubbi, utilizza la libreria HTTP Guzzle. Guzzle fornisce un livello di astrazione per le richieste HTTP, che ti consente di modificare il servizio sottostante senza riscrivere il codice dell'applicazione.

Gestori di stream

Gli handler di stream HTTP(S) standard vengono utilizzati nelle funzioni PHP predefinite come fopen() e 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 e cURL "lite"

Attiva cURL o cURL "lite" in php.ini per utilizzare le funzioni cURL per le richieste in uscita. cURL "lite" utilizza il servizio di recupero URL, mentre cURL utilizza 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

Per impostazione predefinita, Guzzle utilizza il gestore dello stream di PHP, ma utilizzerà automaticamente un gestore cURL se cURL o cURL "lite" è abilitato.

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

Impostazione di un timeout della richiesta

Utilizza l'opzione timeout nel contesto HTTP per modificare la scadenza.

Disattivare i reindirizzamenti

Se utilizzi il recupero dell'URL, il servizio di recupero dell'URL sottostante segue fino a cinque reindirizzamenti per impostazione predefinita. Questi reindirizzamenti potrebbero inoltrare informazioni sensibili, come le intestazioni di autorizzazione, alla destinazione reindirizzata. Se la tua app non richiede i reindirizzamenti HTTP, ti consigliamo di disattivarli.

Per indicare al servizio di recupero dell'URL di non seguire i reindirizzamenti, l'app deve impostare il parametro follow_location nelle opzioni di contesto HTTP su false.

Invio di una richiesta HTTPS

Consulta la sezione Emissione di una richiesta HTTP sopra.

Disattivazione della convalida del certificato host

Per impostazione predefinita, l'implementazione di App Engine del wrapper HTTPS tenta di convalidare il certificato dell'host e rifiuta le richieste in cui il certificato non corrisponde. Per disattivare questo comportamento, imposta il valore di verify_peer su false nelle opzioni di contesto SSL/TLS.

Emissione di una richiesta a un'altra app App Engine

Quando emetti una richiesta a un'altra app App Engine, la tua app App Engine deve affermare la propria identità aggiungendo l'intestazione X-Appengine-Inbound-Appid alla richiesta. Se indichi al servizio di recupero dell'URL di non seguire i reindirizzamenti, App Engine aggiugnerà automaticamente questa intestazione alle richieste.

Per istruzioni su come disattivare i reindirizzamenti, consulta Disattivare i reindirizzamenti.

Passaggi successivi

Scopri di più sul servizio di recupero URL, ad esempio le intestazioni inviate in una richiesta di recupero URL in Richieste in uscita.