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. Non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono apparire simili ai codici di paese e provincia 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 emettere richieste HTTP(S) dalla tua app App Engine.

App Engine utilizza il servizio di recupero URL per emettere richieste HTTP(S) in uscita. Per maggiori dettagli sui limiti di dimensioni delle richieste e sulle intestazioni inviate in una richiesta di recupero degli URL, consulta Richieste in uscita.

Emissione di una richiesta HTTP

Il linguaggio PHP offre varie funzioni per effettuare richieste HTTP remote. Queste implementazioni sono implementate in modi diversi in Google App Engine e sono soggette a quote e costi differenti:

  • Gestori dei flussi: i gestori di flussi PHP nativi http:// e https:// sono configurati per utilizzare il servizio di recupero URL di App Engine per effettuare richieste HTTP. Molte funzioni PHP, come file_get_contents(), utilizzano indirettamente i gestori di flussi e, di conseguenza, anche il servizio di recupero URL.
  • Estensione cURL: l'estensione cURL utilizza il servizio Socket. L'estensione cURL deve essere abilitata nel file php.ini dell'applicazione e la fatturazione deve essere abilitata 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 Socket. 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 per porte diverse dalla 80 (HTTP) o dalla 443 (HTTPS)

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

Gestori degli stream

I gestori di flussi HTTP(S) standard vengono utilizzati nelle funzioni PHP integrate 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"

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

Bevitore

Per impostazione predefinita, Guzzle utilizza il gestore di 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.

Disattivazione dei reindirizzamenti

Se utilizzi il servizio di recupero URL, per impostazione predefinita il servizio sottostante di recupero URL segue fino a cinque reindirizzamenti. 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 disabilitare questi ultimi.

Per indicare al servizio di recupero 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 Invio di una richiesta HTTP qui sopra.

Disabilitazione della convalida del certificato host in corso...

Per impostazione predefinita, l'implementazione del wrapper HTTPS in App Engine 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.

Invio di una richiesta a un'altra app App Engine

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

Per istruzioni su come disattivare i reindirizzamenti, consulta l'argomento Disattivazione dei reindirizzamenti.

Passaggi successivi

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