Emettere richieste HTTPS

ID regione

L'elemento REGION_ID è un codice abbreviato che Google assegna 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 utilizzando il servizio di recupero URL per i runtime di seconda generazione.

Prima di seguire le istruzioni riportate in questa pagina, ti consigliamo di utilizzare soluzioni idiomatiche del linguaggio per inviare richieste HTTP(S) prima di utilizzare il servizio di recupero URL. Il caso d'uso principale per l'utilizzo del recupero URL è quando vuoi inviare richieste HTTP(S) a un'altra app App Engine e asserire l'identità della tua app nella richiesta.

Per informazioni dettagliate sui limiti di dimensione delle richieste e sulle intestazioni inviate in una richiesta di recupero URL, consulta Richieste in uscita.

Per impostazione predefinita, le applicazioni in esecuzione nel runtime Java utilizzano classi Java standard per le richieste HTTP(S), ad esempio java.net.HttpURLConnection. Le richieste vengono inviate come per qualsiasi altra applicazione Java.

Utilizzare le classi di rete del runtime standard

Se utilizzi le classi di rete Java standard, la tua app avrà accesso alle seguenti funzionalità:

  • Il limite di 32 MB per i dati delle richieste non si applica.
  • Supporto per HTTP 2.0.
  • Supporta tutte le API basate su Google Cloudaccessibili dalle librerie client di Cloud per Java.

Utilizzare il recupero URL

Se devi utilizzare il recupero URL in un'app Java, aggiungi la seguente riga al tuo appengine-web.xml file:

 <url-stream-handler>urlfetch</url-stream-handler>

Ad esempio:

<xml version="1.0" encoding="utf-8">
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <!-- ... -->
  <url-stream-handler>urlfetch</url-stream-handler>
  <!-- ... -->
</appengine-web-app>

Inviare una richiesta HTTP

Per utilizzare il servizio di recupero URL per inviare richieste HTTP(S) in uscita, utilizza il java.net.URLConnection.

Il seguente snippet mostra come eseguire una richiesta HTTP GET di base. L'applicazione crea un nuovo oggetto URL, quindi chiama il metodo openStream() dell'oggetto per recuperare i contenuti all'URL:

URL url = new URL("http://api.icndb.com/jokes/random");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer json = new StringBuffer();
String line;

while ((line = reader.readLine()) != null) {
  json.append(line);
}
reader.close();

Per richieste più avanzate, utilizza java.net.HttpURLConnection come segue:

  1. Crea un nuovo oggetto URL.
  2. Crea un nuovo oggetto URLConnection chiamando il metodo openConnection() dell'oggetto URL.
  3. Crea un nuovo oggetto HttpURLConnection eseguendo il cast dell'oggetto URLConnection al tipo di oggetto HttpURLConnection.
  4. Imposta il metodo di richiesta dell'oggetto HttpURLConnection.
  5. Crea uno stream di output per la richiesta.
  6. Scrivi il payload della richiesta nello stream.
  7. Chiudi lo stream.

Il seguente snippet mostra come utilizzare HttpURLConnection per eseguire una richiesta più avanzata e inviare dati da un modulo web utilizzando una richiesta PUT:

URL url = new URL("http://jsonplaceholder.typicode.com/posts/" + id);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Enable output for the connection.
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
// Set HTTP request method.
conn.setRequestMethod("PUT");

// Create JSON request.
JSONObject jsonObj =
    new JSONObject().put("userId", 1).put("id", id).put("title", text).put("body", text);

OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
writer.write(jsonObj.toString());
writer.close();

int respCode = conn.getResponseCode(); // New items get NOT_FOUND on PUT
if (respCode == HttpURLConnection.HTTP_OK || respCode == HttpURLConnection.HTTP_NOT_FOUND) {
  req.setAttribute("error", "");
  StringBuilder response = new StringBuilder();
  String line;

  // Read input data stream.
  BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  while ((line = reader.readLine()) != null) {
    response.append(line);
  }
  reader.close();
  req.setAttribute("response", response.toString());
} else {
  req.setAttribute("error", conn.getResponseCode() + " " + conn.getResponseMessage());
}

Impostare un timeout della richiesta

Se utilizzi il recupero URL, modifica la scadenza predefinita per le richieste utilizzando l'impostazione appengine.api.urlfetch.defaultDeadline nel file appengine-web.xml.

Impostare le intestazioni

Se utilizzi il recupero URL, puoi impostare un'intestazione HTTP nella richiesta in uscita chiamando il metodo setRequestProperty() dell'oggetto HttpURLConnection. Il seguente snippet imposta l'intestazione X-MyApp-Version su 2.7.3:

conn.setRequestProperty("X-MyApp-Version", "2.7.3");

Disattivare i reindirizzamenti

Per impostazione predefinita, HttpURLConnection segue i reindirizzamenti HTTP.

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 reindirizzamenti HTTP, ti consigliamo di disattivarli.

Per disattivare questo comportamento, passa il valore false al metodo setInstanceFollowRedirects() dell'oggetto HttpURLConnection:

conn.setInstanceFollowRedirects(false);

Se la tua app utilizza direttamente il pacchetto sottostante urlfetch anziché java.net, deve specificare doNotFollowRedirects.

Inviare una richiesta HTTPS

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

Disattivare la convalida del certificato host

Per disattivare la convalida automatica del certificato host nel recupero URL, invia una richiesta HTTPS utilizzando la classe FetchOptions nel pacchetto urlfetch e chiama il metodo doNotValidateCertificate().

Inviare una richiesta asincrona

Per impostazione predefinita, le richieste HTTP(S) sono sincrone. Per inviare una richiesta asincrona l'applicazione deve utilizzare URLFetchService's fetchAsync() metodo. Questo metodo restituisce un java.util.concurrent.Future<HTTPResponse>.

Inviare una richiesta a un'altra app App Engine

Quando utilizzi il recupero URL per inviare una richiesta a un'altra app App Engine, la tua app può asserire 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 indicazioni su come disattivare i reindirizzamenti, consulta Disattivare i reindirizzamenti.

Passaggi successivi

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