Mengambil data menggunakan Skrip
Topik ini mencakup contoh cara menulis skrip yang mendapatkan data melalui Microsoft Windows HTTP Services (WinHTTP) baik secara sinkron maupun asinkron. Konsep yang ditunjukkan dalam contoh ini memberikan dasar untuk menulis aplikasi server tingkat menengah atau klien yang memerlukan akses ke data menggunakan protokol HTTP.
- Prasyarat dan Persyaratan
- Mengambil Data Secara Sinkron
- Mengambil Data Secara Asinkron
- Topik terkait
Prasyarat dan Persyaratan
Selain pengetahuan kerja tentang Microsoft JScript, contoh ini memerlukan hal berikut:
- Versi Microsoft Windows Software Development Kit (SDK) saat ini.
- Alat konfigurasi proksi untuk membuat pengaturan proksi untuk Microsoft Windows HTTP Services (WinHTTP), jika koneksi Anda ke Internet melalui server proksi. Untuk informasi selengkapnya, lihat ProxyCfg.exe, Alat Konfigurasi Proksi.
- Pemahaman tentang terminologi dan konsep jaringan.
Mengambil Data Secara Sinkron
Untuk membuat skrip yang mendapatkan teks dari halaman Web secara sinkron, lakukan hal berikut:
Buka editor teks.
Salin kode berikut ke editor teks.
function getText(strURL) { var strResult; try { // Create the WinHTTPRequest ActiveX Object. var WinHttpReq = new ActiveXObject( "WinHttp.WinHttpRequest.5.1"); // Create an HTTP request. var temp = WinHttpReq.Open("GET", strURL, false); // Send the HTTP request. WinHttpReq.Send(); // Retrieve the response text. strResult = WinHttpReq.ResponseText; } catch (objError) { strResult = objError + "\n" strResult += "WinHTTP returned error: " + (objError.number & 0xFFFF).toString() + "\n\n"; strResult += objError.description; } // Return the response text. return strResult; } WScript.Echo(getText("https://www.microsoft.com/default.htm"));
Simpan file sebagai "Retrieve.js".
Dari prompt perintah, ketik "cscript Retrieve.js" dan tekan ENTER.
Sekarang Anda memiliki skrip yang menggunakan objek WinHttpRequest untuk mendapatkan kode sumber HTML untuk halaman Web di https://www.microsoft.com. Anda mungkin harus menunggu beberapa detik agar kode muncul.
Aplikasi ini hanya berisi satu fungsi, "getText". Baris pertama skrip membuat objek WinHttpRequest .
// Create the WinHTTPRequest ActiveX Object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
Ketika mesin JScript menemukan baris ini, mesin tersebut membuat instans objek ini. Jika Anda mendapatkan pesan kesalahan, "komponen ActiveX tidak dapat membuat objek", pada baris ini, kemungkinan besar WinHttp.dll tidak terdaftar dengan benar atau tidak ada pada sistem.
Baris skrip berikutnya memanggil metode Buka .
// Create an HTTP request.
WinHttpReq.Open("GET", "https://www.microsoft.com", false);
Tiga parameter menentukan kata kerja HTTP mana yang akan digunakan, nama sumber daya, dan apakah akan menggunakan WinHTTP secara sinkron atau asinkron. Dalam contoh ini, metode ini menggunakan kata kerja HTTP"GET" untuk mendapatkan data dari https://www.microsoft.com. Menentukan FALSE untuk parameter terakhir menentukan bahwa transaksi terjadi secara sinkron. Metode Buka tidak membuat koneksi ke sumber daya karena namanya mungkin menyiratkan. Sebaliknya, ini menginisialisasi struktur data internal yang mempertahankan informasi tentang sesi, koneksi, dan permintaan.
Metode Kirim merakitan header permintaan dan mengirim permintaan. Ketika dipanggil dalam mode sinkron, metode Kirim juga menunggu respons sebelum memungkinkan aplikasi untuk melanjutkan.
// Send the HTTP request.
WinHttpReq.Send();
Setelah mengirim permintaan, skrip mengembalikan nilai properti ResponseText dari objek WinHttpRequest . Properti ini berisi isi entitas respons, dalam hal ini, sumber dokumen.
// Get the response text.
return WinHttpReq.ResponseText;
Eksekusi skrip dijeda saat seluruh teks sumber daya diambil. Teks sumber daya dikembalikan dari fungsi dan ditampilkan.
Objek WinHttpRequest memastikan bahwa sumber daya internal apa pun yang dialokasikan untuk transaksi HTTP dirilis.
Mengambil Data Secara Asinkron
Mengambil data secara asinkron menggunakan WinHTTP sangat mirip dengan mengambil data secara sinkron. Ubah skrip dari bagian sebelumnya dengan membuat dua perubahan kecil.
Atur parameter ketiga dari metode Buka ke "true" alih-alih "false" untuk menentukan bahwa metode WinHTTP harus dilakukan secara asinkron.
// Create a HTTP request. var temp = WinHttpReq.Open("GET", strURL, true);
Panggil metode WaitForResponse sebelum mengakses properti ResponseText untuk memastikan bahwa seluruh respons telah diterima.
// Send the HTTP request. WinHttpReq.Send(); // Wait for the entire response. WinHttpReq.WaitForResponse(); // Retrieve the response text. strResult = WinHttpReq.ResponseText;
Keuntungan utama menggunakan WinHTTP secara asinkron dalam skrip adalah bahwa metode Kirim segera kembali. Permintaan disiapkan dan dikirim oleh utas pekerja. Ini memungkinkan aplikasi Anda untuk melakukan hal-hal lain saat menunggu respons. Sebelum mencoba mengakses respons, pastikan bahwa seluruh respons telah diterima dengan memanggil metode WaitForResponse . Jika tidak, kesalahan dapat terjadi.
Metode WaitForResponse juga dapat digunakan untuk menentukan nilai waktu habis untuk transaksi. Parameter opsional memungkinkan Anda menentukan nilai waktu habis dalam hitung detik.
Topik terkait