Menerbitkan Permintaan HTTP(S)

ID region

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal tersebut, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Halaman ini mendeskripsikan cara mengeluarkan permintaan HTTP(S) dari aplikasi App Engine Anda.

Secara default, aplikasi yang berjalan di runtime Java 8 menggunakan class Java standar untuk permintaan HTTP(S), seperti java.net.HttpURLConnection. Anda mengirimkan permintaan seperti yang Anda lakukan untuk aplikasi Java lainnya. Untuk menggunakan perilaku default, Anda harus mengaktifkan penagihan untuk aplikasi atau Anda akan mendapatkan pengecualian berikut:

  • java.net.UnknownHostException
  • java.net.SocketTimeoutException
  • java.io.IOException

Menggunakan class jaringan runtime standar

Jika menggunakan class jaringan Java standar, aplikasi Anda akan memiliki akses ke fitur berikut:

Menggunakan URL-fetch

Jika Anda harus menggunakan URL-fetch pada aplikasi Java 8, tambahkan baris berikut ke appengine-web.xml:

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

Contoh:

<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>

Mengeluarkan permintaan HTTP

Anda mengeluarkan permintaan HTTP keluar menggunakan java.net.URLConnection.

Cuplikan berikut menunjukkan cara melakukan permintaan GET HTTP dasar. Aplikasi akan membuat objek URL baru, lalu memanggil metode openStream() objek untuk mengambil konten di URL tersebut:

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

Untuk permintaan lanjutan lainnya, gunakan java.net.HttpURLConnection sebagai berikut:

  1. Buat objek URL baru.
  2. Buat objek URLConnection baru dengan memanggil metode openConnection() objek URL Anda.
  3. Buat objek HttpURLConnection baru dengan mentransmisikan objek URLConnection ke jenis objek HttpURLConnection.
  4. Tetapkan metode permintaan objek HttpURLConnection.
  5. Buat streaming output untuk permintaan.
  6. Tulis payload permintaan ke aliran data.
  7. Tutup aliran data.

Cuplikan berikut menunjukkan cara menggunakan HttpURLConnection untuk melakukan permintaan lanjutan, dengan mengirimkan data dari formulir web melalui permintaan 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());
}

Menyetel waktu tunggu permintaan

Jika menggunakan URL-fetch, Anda dapat menyesuaikan batas waktu default untuk permintaan menggunakan setelan appengine.api.urlfetch.defaultBatas pada file appengine-web.xml.

Menyetel header

Jika menggunakan URL-fetch, Anda dapat menetapkan header HTTP pada permintaan keluar, dengan memanggil metode setRequestProperty() objek HttpURLConnection. Cuplikan berikut menetapkan header X-MyApp-Version ke 2.7.3:

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

Menonaktifkan pengalihan

Secara default, HttpURLConnection mengikuti pengalihan HTTP.

Jika Anda menggunakan URL-fetch, layanan URL-fetch yang mendasarinya akan mengikuti hingga lima pengalihan secara default. Pengalihan ini dapat meneruskan informasi sensitif, seperti header otorisasi, ke tujuan yang dialihkan. Jika aplikasi Anda tidak memerlukan pengalihan HTTP, sebaiknya nonaktifkan pengalihan.

Untuk menonaktifkan perilaku ini, teruskan nilai false ke metode setInstanceFollowRedirects() objek HttpURLConnection Anda:

conn.setInstanceFollowRedirects(false);

Jika aplikasi Anda menggunakan paket urlfetch yang mendasarinya secara langsung, bukan java.net, aplikasi harus menentukan doNotFollowRedirects.

Mengeluarkan permintaan HTTPS

Jika Anda menggunakan URL-fetch, keluarkan permintaan HTTPS menggunakan class FetchOptions dalam paket urlfetch dan panggil validateCertificate().

Mengeluarkan permintaan asinkron

Permintaan HTTP(S) bersifat sinkron secara default. Untuk memberikan permintaan asinkron, aplikasi Anda harus menggunakan metode fetchAsync() URLFetchService. Metode ini akan menampilkan java.util.concurrent.Future<HTTPResponse>.

Mengeluarkan permintaan ke aplikasi App Engine lain

Saat menerbitkan permintaan ke aplikasi App Engine lain, aplikasi App Engine Anda harus menegaskan identitasnya dengan menambahkan header X-Appengine-Inbound-Appid ke permintaan tersebut. Jika Anda menginstruksikan layanan URL-Fetch untuk tidak mengikuti pengalihan, App Engine akan otomatis menambahkan header ini ke permintaan.

Lihat Menonaktifkan pengalihan untuk mendapatkan panduan tentang cara menonaktifkan pengalihan.

Langkah selanjutnya

Pelajari layanan URL-Fetch, seperti header yang dikirim dalam permintaan URL Fetch di Permintaan Keluar.