Rabu, 17 Juni 2009

Membaca Halaman Web dengan C#

HTTP classes pada .NET framework adalah HTTPWebRequest dan HTTPWebResponse.  Langkah yang diperlukan  untuk menggunakannya adalah menentukan halaman web yang akan dibaca menggunakan HTTPWebRequest object, melakukan request yang dibutuhkan, dan menggunakan HTTPWebResponse object untuk menerima halaman web.  Untuk itu kita perlu menggunakan operasi stream untuk meng-ekstrak informasi pada halaman tersebut. Berikut contoh program yang memperlihatkan bagaimana proses tersebut berlangsung.

 

using System;
using System.IO;
using System.Net;
using System.Text;

/// <summary>
/// Fetches a Web Page
/// </summary>
class WebFetch
{
static void Main(string[] args)
{
// untuk menyimpan data input
StringBuilder sb = new StringBuilder();

// untuk menampung setiap operasi pembacaan data
byte[] buf = new byte[8192];

// siapkan halaman web yang akan dibaca
HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.vitraining.com/cms");

// jalankan request
HttpWebResponse response = (HttpWebResponse) request.GetResponse();

// baca data melalui response stream
Stream resStream = response.GetResponseStream();

string tempString = null;
int count = 0;

do
{
// isi buffer dengan data
count = resStream.Read(buf, 0, buf.Length);

// pastikan ada data yang dibaca
if (count != 0)
{
// translate dari bytes ke ASCII text
tempString = Encoding.ASCII.GetString(buf, 0, count);

// simpan string
sb.Append(tempString);
}
}
while (count > 0); // masih ada data yang perlu dibaca?

// tampilkan output
Console.WriteLine(sb.ToString());
}
}



Program pada Listing 1 akan me-request halaman web dan menampilkan HTML pada layar.  Dikarenakan data dari halaman web berupa bytes, kite perlu set sebuah byte array, yang diberinama buf, untuk menampung byte tersebut.



Langkah pertama adalah membuat HttpWebRequest object.  Ini terjadi ketika kita memanggil method Create() dari WebRequest.  Parameter method Create() adalah string yang berisi URL web page yang akan dibaca. Method Create() return object berjenis WebRequest , jadi kita perlu melakukan cast ke jenis HttpWebRequest sebelum meng-assign-nya ke variabel request .  Berikut ini baris programnya:



		HttpWebRequest  request  = (HttpWebRequest)
WebRequest.Create("http://www.mayosoftware.com");




Ketika request object sudah terbentuk, kita tinggal gunakan untuk membuat response object.  Object response dibuat menggunakan method GetResponse() dari  request object yang baru saja dibuat.  Method GetResponse() tidak membutuhkan parameters dan return object berjenis WebResponse yang harus di-cast menjadi HttpWebResponse sebelum kita bisa meng-assign-nya kepada response object.  Baris berikut ini menampilkan bagaimana memperoleh HttpWebResponse object.




		HttpWebResponse response = (HttpWebResponse) request.GetResponse();




Object response digunakan untuk mendapatkan Stream object, yang merupakan member dari namespace System.IO .  Method GetResponseStream() dari response dipanggil untuk mendapatkan stream ini sebagai berikut:




		Stream resStream = response.GetResponseStream();




Sekarang kita akan menggunakan object byte array yang sudah didefinisikan diatas, yaitu melalui method Read() dari object stream untuk menerima data dari web page.  Method Read() memiliki 3 arguments:  yang pertama adalah byte array yang akan menampung data, yang kedua adalah posisi awal array yang akan diisi, dan yang ketiga adalah jumlah maximum byte yang akan dibaca.  Return-nya adalah jumlah byte yang berhasil dibaca.  Berikut ini bagaimana membaca data dari web page:




		count = resStream.Read(buf, 0, buf.Length);




Sekarang array of bytes buf sudah terisi dengan data dari web page. Namun data bytes ini perlu dikonversi terlebih dahulu menjadi string agar kita dapat memanfaatkan semua method untuk memanipulasi string yang tersedia pada  .NET.  Disini kita gunakan class ASCII yang terdapat pada class Encoding pada namespace System.Text.  Class ASCII memiliki method GetString() yang mempunyai tiga parameter mirip seperti method  Read() .  Parameter pertama adalah byte array yang akan dibaca yaitu buf .  Parameter kedua adalah posisi awal yang akan dibaca pada buf .  Parameter ketiga adalah jumlah bytes pada buf yang akan dibaca, yang dalam hal ini adalah count, yang merupakan jumlah bytes hasil method Read() yang akan menjamin bahwa hanya sejumlah itu byte yang akan dikonversi.  Berikut ini program yang menkonversi bytes pada buf menjadi string dan menyimpan hasilnya pada object StringBuilder.




		tempString = Encoding.ASCII.GetString(buf, 0, count);

sb.Append(tempString);


Ukutan diset 8192, yang sangat kecil bahkan untuk menampung halaman web yang sederhana.  Untuk mensiasati hal ini, baris program yang membaca response stream harus dibuat menjadi loop yang terus membaca sampai tidak ada lagi data bytes.  Listing 1 program di atas menggunakan loop do karena kita paling tidak perlu melakukan satu kali pembacaan. Ingat bahwa setiap kali pemanggilan  read() hasilnya adalah jumlah byte yang berhasil dibaca.  Kondisi pada while dari loop do mengecek jumlah tersebut untuk memastikan bahwa sesuatu telah berhasil dibaca.  Juga perhatikan adanya statement if yang memastikan bahwa kita tidak menkonversi bytes ketika tidak ada data yang dibaca.  Karena kita menggunakan loop, kita perlu mengumpulkan hasil pembacaan pada setiap perulangan, yang dalam hal ini di-append pada object StringBuilder.



Akhmad Daniel Sembiring


vITraining.com



Ligarwangi.com - toserba online

Tidak ada komentar: