Bab 15 Common Gateway Interface (CGI)

Barangkali pernah terlintas dalam  pikiran  anda,  bagamana  cara  kerja
search engine (mesin pencari) yang ada di  WWW semacam Altavista, Lycos, 
Yahoo! dan Webcraler.  Mungkin anda  bertanya-tanya,  bagaimana  caranya 
server web bisa mengolah informasi yang kita  kirimkan  lewat  browser ? 
Bagaimana bisa sebuah website  menghitung  jumlah  pengunjungnya  dengan 
"web counter"? Bagaimana caranya sehingga kita bisa  mengakses  database 
lewat browser seperti yang ditampilkan oleh banyak website di Internet ? 
Semua itu dapat terlaksana berkat adanya CGI (common gateway interface).

CGI muncul sebagai usaha untuk menampilkan informasi yang dinamis dalam
World Wide Web. CGI memungkinkan komputer untuk  menghasilkan  dokumen-
dokumen web secara  langsung  atas  permintaan  pengguna,  dan  bukanya 
ditulis terlebih dahulu  oleh  seseorang.  CGI  memungkinkan  pembuatan 
aplikasi yang interaktif dengan pengguna  di  Internet,  tidak  sekedar
statis.

CGI,hingga saat ini,adalah satu-satunya metode yang stabil dan dipahami
secara luas untuk membuat dokumen-dokumen macam itu. Java, yang  dewasa 
ini banyak dibicarakan, masih bermasalah yang hingga kini belum  benar-
benar terpecahkan.

Bagaimana Sebenarnya CGI

Pada dasarnya sederhana. CGI memungkinkan server  web  dapat  memanggil
suatu program (yang juga  berada  pada  server),  sambil  berkomunikasi
denganya. Server web dapat memberikan data kepada program luar tersebut
dan membiarkan program memproses  datanya,  kemudian  menerima  kembali
hasil keluaran program, dan mengirimkanya kembali  ke  browser.  Server
menerima   informasi  dari  komputer  pengguna,  misalnya  alamat  host 
komputer pengguna atau data masukan  yang  berasal  dari  form  dokumen 
HTML.

Penerapan CGI

Penerapan CGI yang paling umum adalah dalam pemrosesan  form  (mengenai
form telah kita bahas pada bab 8). Umumnya, form dipergunakan untuk dua
kegunaan   utama .  Yang  sederhana  adalah  form  yang  dipakai  untuk
mengumpulkan informasi dari pengguna dan mengirimkanya ke server. Namun 
form juga bisa dipakai untuk keperluan  yang  lebih  "canggih"  seperti
interaksi timbal balik antara pengguna dan server, misalnya  form  yang
memberikan sedaftar pilihan dokumen dalam server kepada pengguna  untuk
dipilih. Program CGI di server dibuat untuk mengolah informasi ini  dan
kemudian  mengirimkan  dokumen - dokumen  yang  sesuai  dengan  pilihan
pengguna

Dalam buku ini, yang telah kita pelajari adalah cara penyusunan dokumen
web dengan HTML statis. Artinya, semua dokumen yang dibaca oleh browser 
telah terlebih dahulu ditulis oleh kita  sebagai  pembuat  dokumen  dan
tidak akan berubah kecuali diubah oleh pembuat dokumen. CGI  menawarkan
cara lain, yaitu dokumen yang  dinamis, yang diciptakan secara langsung 
oleh program mengikuti permintaan informasi dari pengguna.

Contoh nyata penerapan CGI untuk dokumen  dinamis  ini  misalnya  suatu
"buku tamu". Pengguna memasukkan informasi seperti nama, alamat, alamat
e-mail, dan komentar-komentarnya ke dalam form. Setelah server menerima
informasi-informasi tadi, program CGI dapat menyimpanya ke dalam  suatu
File atau secara otomatis mengirimkanya lewat e-mail ke  suatu  alamat.
Program CGI juga bisa menampilkan dokumen yang  berisi  informasi  yang
baru saja dikirimkan  oleh  pengguna  tadi  sembari  memberikan  ucapan 
terima kasih atas partisipasinya.

Penerapan lain dari CGI adalah sebuah gateway. Artinya  adalah  program
yang dipergunakan sebagai penghubung  untuk  mengakses  informasi  yang
tidak dapat secara langsung dibaca oleh program browser pengguna.Contoh
yang nyata adalah gateway yang menghubungkan antara web  server  dengan
dengan suatu database server yang besar semacam oracle  atau  DB2, yang 
memang dapat dilakukan dengan mempergunakan bahasa pemrograman Perl dan 
DBI extentionta sehingga web server bisa  memberikan  query  dalam  SQL
(structured query language, yaitu bahasa yang dipakai  untuk  melakukan
pendefinisian maupun manipulasi terhadap database) ke  server  database
Oracle. Setelah informasi dari database keluar, program CGI mengubahnya
ke dalam bentuk yang bisa dibaca browser (HTML)  dan  web  server  pada
giliranya mengirimkanya kepada browser.

Program CGI pada prinsipnya bisa ditulis dalam bahasa  pemrograman  apa
saja, namun kenyataanya tidak  semua  bahasa  pemrograman  cocok  untuk
pemrograman CGI. Penerapan CGI dapat sangat kompleks, dan untuk membuat 
suatu program CGI menuntut pengetahuan teknis yang  cukup  tinggi  akan 
pemrograman. 

Perl

Perl ( practical  Extraction  and report  language )  adalah  :  bahasa
pemrograman yang sampai saat ini masih paling populer  untuk  penerapan
CGI. Dibanding bahasa-bahasa lain seperti C/C++,C Shell di UNIX ataupun
VisualBasic di Windows, banyak kemampuan-kemampuan Perl yang membuatnya 
lebih  cocok  untuk  CGI,  disamping  cukup  mudah  untuk  dipelajari . 
Keuntungan-keuntungan Perl antara lain;

. Portabel (mudah dipindah-pindahkan antar lingkungan sistem)

. Memiliki kemampuan-kemampuan manipulasi teks yang kuat

. Tersedia banyak extention untuk Perl misalnya Oraperl dan DBI untuk
  mengakses database.

Perl awalnya dibuat untuk lingkungan sistem operasi UNIX, namun sejalan
perkembangan jaman saat ini juga telah terdapat interpreter Perl  untuk
penerapan di dalam sistem operasi Windows  /  Windows  NT  (Perl Win32)
serta Macintosh(MacPerl)

Contoh Program dengan Perl

Kita coba  untuk  mempelajari  contoh  sebuah  program  sederhana  yang 
ditulis dalam Perl.Program ini tugasnya memproses data dari form berupa 
nama pengguna dan kata sandi (password).  Program  menerima  data  dari 
browser, mencocokkan nama serta  kata  sandi  dengan  data  yang  sudah 
tersimpan, dan  apabila  cocok,  menampilkan  ucapan  "selamat  datang" 
sambil menampilkan  informasi-informasi tentang server, nama web server 
yang diakses, alamat  IP  pengguna  yang  mengakses  server  dan  jenis 
program browser yang dipakai pengguna. Apabila kata sandi tidak  tepat, 
program akan mengirimkan dokumen  yang  berisikan  pemberitahuan  bahwa 
kata sandi yang  dimasukkan  pengguna  tidak  benar  dan  secara  halus 
mempersilahkan pengguna untuk pergi.

Pada dasarnya program CGI bisa memperoleh  informasi  dari  tiga  macam
sumber  yaitu  informasi  yang  berasal  dari  pengguna  (dengan form), 
informasi tentang server, pengguna  serta  browser  yang  berasal  dari 
variabel lingkungan (environment variable), dan informasi yang  berasal 
dari informasi pathname
tambahanPertama kita buat dahulu file HTML untuk membuat dokumen dengan 
form yang bertugas mengumpulkan informasi nama dan kata sandi pengguna. 
Bila anda lupa cara membuat form, bukalah kembali bab8.

<HTML>
<HEAD>
<TITLE>Pintu masuk ke web site saya</TITLE>
</HEAD>

<BODY>
<HR>
<H3>Mohon masukkan informasi berikut</H3>
<FORM ACTION="/cgi-bin/cocokkan.pl Method="GET">
<PRE>
Nama anda   :<INPUT TYPE="text" NAME="nama" SIZE=15>
Kata sandi  :<INPUT TYPE="password" NAME="sandi" SIZE=8>
<P>
<INPUT TYPE="submit" VALUE="kirim Data">
</PRE>
</FORM>
<HR>
</BODY>
</HTML>

Ketika pengguna mengklikkan mouse pada  tombol  "Kirimkan  Data", data
dikirimkan ke server dengan metode "GET" seperti yang ditunjukkan oleh
pernyataan METHOD="GET". Ada dua  metode  pengiriman  data  yang  bisa
dipakai, yaitu GET dan POST. Perbedaanya adalah  dengan GET, informasi
dikirim sebagai bagian dari string permintaan URL/lokasi yang  dikirim 
oleh browser, sementara dengan post, data dikirim dengan cara  seperti 
aliran (stream). Kita pergunakan metode GET untuk contoh  program  ini 
oleh karena lebih mudah untuk dijelaskan.

Pernyataan   ACTION="/cgi-bin/cocokkan.pl"  menunjukkan  nama  program
(dalam hal ini sebuah script Perl) yaitu "cocokkan.pl" yan  berada  di
direktori "/cgi-bin" di dalam web server.  Program  Perl  inilah  yang 
kemudian dijalankan oleh web server untuk memproses data yang diterima 
dari browser.

Adapun program "cocokkan.pl" itu sendiri berisi sebagai berikut;
	#!/usr/local/bin/perl
	print "content-type: text/html", "\n";
	print "Pragma: no-cache", "\n\n";

	$data_mentah = $ENV{QUERY_STRING};
	($nama_mentah, $sandi_mentah) = split (/&/, $data_mentah);
	($kunci, $nama) = split (/=/, $nama_mentah);
	($kunci, $sandi) = split (/=/, $sandi_mentah);
	$nama =~ tr/+/ /;

	if ($nama eq "dios", $sandi eq "rahasia")
	     {
             print "<HTML><HEAD><TITLE>Betul!</TITLE></HEAD>", "\n";
             print "<BODY>, "\n";
             print "<H3>Selamat datang $nama !</H3>", "\n";
             print "<P>","\n";
             print "Kata sandi anda benar, anda boleh mempergunakan
             server ini.<BR>","\n";
             print "Nama server ini    : $nama_server","<BR>","\n";
             print "Alamat IP Anda     : $IP","<BR>","\n";
             print "Jenis browser Anda : $jenis_browser","<BR>","\n"; 
             print "<P>","\n";
             print "</BODY>","\n";
             print "</HTML>","\n";
             }
	else
	     {
             print "<HTML><HEAD><TITLE>Salah!</TITLE></HEAD>", "\n";
             print "<BODY>", "\n";
             print "<H3>Maaf, $nama !</H3>", "\n";
             print "<P>","\n";
       
	print "kata sandi anda salah. anda tidak diperkenankan
	memasuki server ini.<P>" "\n";
	print "selamat jalan !","\n";
	print "</BODY>","\n";
	print "</HTML>t","\n";
	}

exit (0);

Penjelasan Jalanya Program

Dua baris pertama program "cocokkan.pl. memberi petunjuk kepada browser
penerima bahwa dokumen dinamis yang akan dikirimkan oleh server  adalah
dokumen teks/HTML. Karena ini melibatkan sebuah program, browser  tidak
diperkenankan memasukkanya ke dalam memori cache dengan  perintah  "no-
cache",.

Selanjutnya perintah

	$data_mentah = $ENV(QUERY_STRING);

mengambil informasi yang berada di variabel  lingkungan  "QUERY_STRING" 
dan memasukkanya  ke  dalam  variabel  "$data_mentah".  Informasi  yang 
terdapat di dalam variabel lingkungan "QUERY_STRING" adalah  data  yang 
dikirimkan oleh browser.

Data yang diperoleh dari browser tidak  bisa  langsung  dipakai  karena 
masih dalam bentuk yang "tercampur". Data yang diperoleh  dari  browser 
(dan disimpan di dalam variabel lingkungan"$QUERY_STRING") kurang lebih
nampak seperti berikut;

	name=dios+kurniawan&sandi=rahasia

Data seperti itu masih belum dapat dipakai dan  harus  dipisah-pisahkan
terlebih dahulu. Untuk itulah guna ketiga baris yang selanjutnya.

	($nama_mentah, $sandi_mentah = split (/&/, $data_mentah);
	($kunci, $nama) = split (/=/, $nama_mentah);
	($kunci, $sandi) = split (/=/, $sandi_mentah);

Yang pertama berfungsi memisahkan (split) isi  variabel  "$data_mentah"
menjadi   dua   variabel   yaitu   "$nama_mentah"  dan  "$sandi_mentah"
mempergunakan karakter "&" sebagai  pemisahnya.  Dua  baris  berikutnya
memecah sekali lagi variabel "$nama_mentah" dan  $sandi_mentah"  dengan
karakter pemisah "=". Setelah dipisah, variabel"$nama" dan "$sandi"akan
berisi nama dan kata sandi yang  diisikan  oleh  pengguna  dalam  form, 
seperti berikut;
	$nama = "dios+kurniawan"
	$sandi = "rahasia"
Baris selanjutnya merapikan pekerjaan. Ia bertugas  mengubah  sembarang
karakter "+" di dalam variabel "$nama" menjadi karakter  spasi "".  Ini
berguna untuk menghilangkan karakter-karakter  "+"  yang  dikirim  oleh
browser sebagai pengganti spasi.

Tiga baris selanjutnya mengambil informasi dari tiga variabel lingkungan
yang berbeda yaitu  yang  berisi  tentang  nama  server,  jenis  browser 
pengguna dan alamat IP pengguna. semua dimasukkan  secara  berurutan  ke 
dalam variabel-variabel masing-masing yang sesuai.

Lalu yang berikutnya adalah baris terpenting dalam program ini;
	if ($nama eq "dios", $sandi eq "rahasia")
Baris diatas mencocokkan apakah isi variabel "$nama" sama dengan (eq,
dari equal)"dios", juga mencocokkan isi variabel "$sandi" dengan "rahasia".
Apabila keduanya cocok, program melangkah ke baris-baris berikutnya;

	print "<HTML><HEAD><TITLE>Betul!</TITLE></HEAD>", "\n";
        print "<BODY>, "\n";
        print "<H3>Selamat datang $nama !</H3>", "\n";
        print "<P>","\n";
        print "Kata sandi anda benar, anda boleh mempergunakan
        server ini.<BR>","\n";
        print "Nama server ini    : $nama_server","<BR>","\n";
        print "Alamat IP Anda     : $IP","<BR>","\n";
        print "Jenis browser Anda : $jenis_browser","<BR>","\n"; 
        print "<P>","\n";
        print "</BODY>","\n";
        print "</HTML>","\n";
Bagian ini nampak  cukup  familiar  bagi  kita.  Ya,  tugasnya  adalah
mengirimkan dokumen HTML  dinamis  kepada  browser, yang isinya adalah
pesan bahwa kata sandi yang dimasukkan  telah  cocok. Dokumen ini juga
menampilkan informasi tentang nama server, alamat IP dan jenis browser
pengguna seperti yang telah berhasil diperoleh dari  variabel-variabel
lingkungan dan telah tersimpan dalam variabel-variabel "$nama_server",
"$IP" dan "$jenis_browser".

Seterusnya adalah pernyataan ELSE. Pernyataan  ini  menunjukkan  bahwa
bagian program yang selanjutnya hanya dijalankan bila dan  hanya  bila
persyaratan yang ditetapkan dalam pernyataan IF di atas (dalam program 
ini bila  variabel"$nama"cocok dengan "dios" dan "$sandi" cocok dengan
"rahasia")telah terpenuhi. Bagian program selanjutnya hanya dijalankan 
bila nama dan sandi yang dimasukkan pengguna tidak cocok, dan langsung
program mengirimkan dokumen HTML yang  berisi  pesan  kepada  pengguna
bahwa kata sandi yang ia masukkan tidak tepat.

Baris terakhir, mungkin sudah dapat anda tebak fungsinya, menghentikan
jalanya program "cocokkan.pl" sampai di situ saja.

Program di atas hanya satu contoh sederhana dari kekuatan Perl. Masih
sangat banyak penerapan-penerapan Perl untuk CGI yang lain, dan  yang 
lebih rumit.

Pembahasan tentang pemrograman CGI dengan Perl lebih lanjut berada di
luar cakupan buku ini. Oleh karenanya penulis  mempersilakan  pembaca 
untuk memperoleh dan mempelajari buku-buku tentang  Perl  yang  telah 
cukup banyak tersedia.
                                                 (kembali ke katalog)
 
    
---------------------------

HTML 3
UNTUK PUBLIKASI DI INTERNET
Oleh DIOS KURNIAWAN
Edisi Pertama, Maret 1997
Dicetak & Diterbitkan
BPFE-YOGYAKARTA
Yogyakarta
Anggota IKAPI
No-003
---------------------------
      

Copyright ada pada penulis