Invio di richieste HTTP(S)

ID regione

Il REGION_ID è un codice abbreviato che Google assegna in base alla regione selezionata durante la creazione dell'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 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.

Emettere una richiesta HTTP

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

  • Gestori di stream: i gestori di stream PHP nativi http:// e https:// sono configurati per utilizzare il servizio URL Fetch di App Engine per effettuare richieste HTTP. Molte funzioni PHP, come file_get_contents(), utilizzano indirettamente i gestori di stream e quindi anche il servizio URL Fetch.
  • Estensione cURL: l'estensione cURL utilizza il servizio Sockets. L'estensione cURL deve essere abilitata nel file php.ini della tua 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 URL Fetch 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 scelta tra cURL, cURL Lite o stream wrapper 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

I gestori di stream 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"

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

Imposta un timeout della richiesta

Utilizza l'opzione timeout in Contesto HTTP per modificare la scadenza.

Disattivare i reindirizzamenti

Se utilizzi URL Fetch, il servizio URL Fetch 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 reindirizzamenti HTTP, ti consigliamo di disattivarli.

Per indicare al servizio URL Fetch di non seguire i reindirizzamenti, la tua app deve impostare il parametro follow_location nelle opzioni di contesto HTTP su false.

Emettere una richiesta HTTPS

Per impostazione predefinita, il servizio URL Fetch sottostante convalida il certificato dell'host che contatta e rifiuta le richieste se il certificato non corrisponde. Non è necessario proteggere esplicitamente la richiesta.

Disattiva la 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.

Emettere una richiesta a un'altra app App Engine

Quando invii 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 istruisci il servizio URL Fetch a non seguire i reindirizzamenti, App Engine aggiungerà automaticamente questa intestazione alle richieste.

Per indicazioni su come disattivare i reindirizzamenti, vedi 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.