Invio di richieste HTTP(S)

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base alla regione selezionata al momento della creazione dell'app. Il codice non corrispondono a un paese o a una provincia, anche se potrebbero essere visualizzati alcuni ID regione in modo simile ai codici paese e provincia di uso comune. Per le app create dopo il giorno Febbraio 2020, REGION_ID.r è incluso in 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:

  • Gestori di streaming: i gestori di stream nativi http:// e https:// sono configurate in modo da utilizzare Servizio di recupero URL per effettuare HTTP richieste. Molte funzioni PHP, come file_get_contents(), utilizzano indirettamente gli handler stream e, di conseguenza, anche il servizio di recupero dell'URL.
  • Estensione cURL: il cURL. utilizza la classe Servizio socket. 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 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 Libreria HTTP di Guzzle. Sorpresa un livello di astrazione per le richieste HTTP, che consente di modificare il servizio sottostante senza riscrivere il codice dell'applicazione.

Gestori di stream

Nel PHP integrato vengono utilizzati i gestori di flussi HTTP(S) standard 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);

Sorpresa

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

$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 URL, il servizio di recupero 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.

Emissione di una richiesta HTTPS

Consulta la sezione Emissione di una richiesta HTTP sopra.

Disattivazione della convalida del certificato host

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

Invio di una richiesta a un'altra app di 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 indicazioni sulla disattivazione dei reindirizzamenti, consulta la sezione 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.