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 menjelaskan cara menerbitkan permintaan HTTP(S) dari aplikasi App Engine Anda.

App Engine menggunakan layanan URL-Fetch untuk menerbitkan permintaan HTTP(S) keluar. Untuk mengetahui detail tentang batas ukuran permintaan dan header mana yang dikirim pada permintaan URL Fetch, lihat Permintaan Keluar.

Menerbitkan permintaan HTTP

Bahasa PHP menyediakan beberapa fungsi untuk membuat permintaan HTTP jarak jauh. Tindakan ini diterapkan dengan berbagai cara di Google App Engine, dan bergantung pada kuota dan biaya yang berbeda:

  • Pengendali stream: http:// native dan pada pengendali stream PHP https:// dikonfigurasi untuk menggunakan Layanan URL-Fetch App Engine untuk membuat permintaan HTTP. Banyak fungsi PHP seperti file_get_contents() menggunakan pengendali stream secara tidak langsung, sehingga juga menggunakan layanan URL-Fetch.
  • Ekstensi cURL: Ekstensi cURL menggunakan layanan Socket. Ekstensi cURL harus diaktifkan di file php.ini dan penagihan aplikasi Anda harus diaktifkan untuk project Anda.
  • cURL "lite": cURL "lite" adalah versi library cURL yang disediakan Google yang menggunakan layanan URL-Fetch, bukan layanan Sockets. Anda harus mengaktifkan cURL "lite" di file php.ini aplikasi Anda. Metode ekstensi cURL berikut tidak didukung:
    • fungsi curl_multi_*
    • dukungan untuk protokol non-standar
    • dukungan untuk port selain 80 (HTTP) atau 443 (HTTPS)

Menentukan apakah akan menggunakan cURL, cURL Lite, atau wrapper stream sangat bergantung pada aplikasi dan preferensi Anda. Jika Anda tidak yakin, gunakan library HTTP Guzzle. Guzzle menyediakan lapisan abstraksi untuk permintaan HTTP, sehingga Anda dapat mengubah layanan dasar tanpa menulis ulang kode aplikasi.

Pengendali stream

Pengendali stream HTTP(S) standar digunakan dalam fungsi PHP bawaan seperti fopen() dan 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 dan cURL "lite"

Aktifkan cURL atau cURL "lite" di php.ini untuk menggunakan fungsi cURL untuk permintaan keluar. cURL "lite" menggunakan layanan URL-Fetch, sedangkan cURL menggunakan Sockets API

$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

Secara default, Guzzle menggunakan pengendali stream PHP, tetapi akan otomatis menggunakan pengendali cURL jika cURL atau cURL "lite" diaktifkan.

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

Menyetel waktu tunggu permintaan

Gunakan opsi timeout dalam konteks HTTP untuk mengubah batas waktu.

Menonaktifkan pengalihan

Jika Anda menggunakan URL Fetch, layanan URL-Fetch dasar 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 menginstruksikan layanan URL-Fetch agar tidak mengikuti pengalihan, aplikasi Anda harus menetapkan parameter follow_location di opsi konteks HTTP ke false.

Menerbitkan permintaan HTTPS

Lihat Menerbitkan Permintaan HTTP di atas.

Menonaktifkan validasi sertifikat host

Secara default, penerapan App Engine wrapper HTTPS mencoba memvalidasi sertifikat host, dan menolak permintaan yang sertifikatnya tidak cocok. Untuk menonaktifkan perilaku ini, tetapkan nilai verify_peer ke false di opsi konteks SSL/TLS.

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