Aplikasi Web Ruby - Pemrograman CGI

Ruby adalah bahasa tujuan umum; itu tidak bisa disebut sebagai bahasa web sama sekali. Meski begitu, aplikasi web dan alat web secara umum adalah penggunaan Ruby yang paling umum.

Anda tidak hanya dapat menulis server SMTP, daemon FTP, atau server Web Anda sendiri di Ruby, tetapi Anda juga dapat menggunakan Ruby untuk tugas-tugas yang lebih umum seperti pemrograman CGI atau sebagai pengganti PHP.

Harap luangkan beberapa menit dengan Tutorial Pemrograman CGI untuk detail lebih lanjut tentang Pemrograman CGI.

Menulis Skrip CGI

Script Ruby CGI paling dasar terlihat seperti ini -

#!/usr/bin/ruby

puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"

Jika Anda memanggil skrip ini test.cgi dan mengunggahnya ke penyedia hosting Web berbasis Unix dengan izin yang tepat, Anda dapat menggunakannya sebagai skrip CGI.

Misalnya, jika Anda memiliki situs Web https://www.example.com/dihosting dengan penyedia hosting Web Linux dan Anda mengunggah test.cgi ke direktori utama dan memberinya izin eksekusi, lalu mengunjungihttps://www.example.com/test.cgi harus mengembalikan halaman HTML bertuliskan This is a test.

Di sini, ketika test.cgi diminta dari browser Web, server Web mencari test.cgi di situs Web, dan kemudian menjalankannya menggunakan penerjemah Ruby. Script Ruby mengembalikan header HTTP dasar dan kemudian mengembalikan dokumen HTML dasar.

Menggunakan cgi.rb

Ruby hadir dengan pustaka khusus bernama cgi yang memungkinkan interaksi yang lebih canggih dibandingkan dengan skrip CGI sebelumnya.

Mari buat skrip CGI dasar yang menggunakan cgi -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

puts cgi.header
puts "<html><body>This is a test</body></html>"

Di sini, Anda membuat objek CGI dan menggunakannya untuk mencetak baris header untuk Anda.

Pemrosesan Formulir

Menggunakan kelas CGI memberi Anda akses ke parameter kueri HTML dengan dua cara. Misalkan kita diberi URL /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali.

Anda dapat mengakses parameter FirstName dan LastName menggunakan CGI # [] secara langsung sebagai berikut -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['FirstName'] # =>  ["Zara"]
cgi['LastName']  # =>  ["Ali"]

Ada cara lain untuk mengakses variabel formulir ini. Kode ini akan memberi Anda hash dari semua kunci dan nilai -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
h = cgi.params  # =>  {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName']  # =>  ["Zara"]
h['LastName']   # =>  ["Ali"]

Berikut adalah kode untuk mengambil semua kunci -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi.keys         # =>  ["FirstName", "LastName"]

Jika formulir berisi beberapa bidang dengan nama yang sama, nilai yang sesuai akan dikembalikan ke skrip sebagai larik. Aksesor [] mengembalikan hanya yang pertama ini.index hasil dari metode params untuk mendapatkan semuanya.

Dalam contoh ini, anggap formulir memiliki tiga bidang yang disebut "nama" dan kita memasukkan tiga nama "Zara", "Huma" dan "Nuha" -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['name']        # => "Zara"
cgi.params['name'] # => ["Zara", "Huma", "Nuha"]
cgi.keys           # => ["name"]
cgi.params         # => {"name"=>["Zara", "Huma", "Nuha"]}

Note- Ruby akan menangani metode GET dan POST secara otomatis. Tidak ada perlakuan terpisah untuk kedua metode berbeda ini.

Formulir terkait, tetapi mendasar, yang dapat mengirimkan data yang benar akan memiliki kode HTML seperti ini -

<html>
   <body>
      <form method = "POST" action = "http://www.example.com/test.cgi">
         First Name :<input type = "text" name = "FirstName" value = "" />
         <br />
         Last Name :<input type = "text" name = "LastName" value = "" /> 
         <input type = "submit" value = "Submit Data" />
      </form>
   </body>
</html>

Membuat Formulir dan HTML

CGI berisi sejumlah besar metode yang digunakan untuk membuat HTML. Anda akan menemukan satu metode per tag. Untuk mengaktifkan metode ini, Anda harus membuat objek CGI dengan memanggil CGI.new.

Untuk mempermudah penumpukan tag, metode ini mengambil kontennya sebagai blok kode. Blok kode harus mengembalikan String , yang akan digunakan sebagai konten untuk tag. Misalnya -

#!/usr/bin/ruby

require "cgi"
cgi = CGI.new("html4")
cgi.out {
   cgi.html {
      cgi.head { "\n"+cgi.title{"This Is a Test"} } +
      cgi.body { "\n"+
         cgi.form {"\n"+
            cgi.hr +
            cgi.h1 { "A Form: " } + "\n"+
            cgi.textarea("get_text") +"\n"+
            cgi.br +
            cgi.submit
         }
      }
   }
}

NOTE- Metode formulir kelas CGI dapat menerima parameter metode, yang akan mengatur metode HTTP (GET, POST, dan seterusnya ...) untuk digunakan pada pengiriman formulir. Default, yang digunakan dalam contoh ini, adalah POST.

Ini akan menghasilkan hasil sebagai berikut -

Content-Type: text/html
Content-Length: 302

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">

<HTML>
   <HEAD>
      <TITLE>This Is a Test</TITLE>
   </HEAD>
   <BODY>
      <FORM METHOD = "post" ENCTYPE = "application/x-www-form-urlencoded">
         <HR>
         <H1>A Form: </H1>
         <TEXTAREA COLS = "70" NAME = "get_text" ROWS = "10"></TEXTAREA>
         <BR>
         <INPUT TYPE = "submit">
      </FORM>
   </BODY>
</HTML>

Mengutip String

Saat berurusan dengan URL dan kode HTML, Anda harus berhati-hati dalam mengutip karakter tertentu. Misalnya, karakter garis miring (/) memiliki arti khusus di URL, jadi itu harusescaped jika bukan bagian dari nama jalur.

Misalnya, setiap / di bagian kueri dari URL akan diterjemahkan ke string% 2F dan harus diterjemahkan kembali ke a / agar Anda dapat menggunakannya. Spasi dan ampersand juga merupakan karakter khusus. Untuk mengatasinya, CGI menyediakan rutinitasCGI.escape dan CGI.unescape.

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

Ini akan menghasilkan hasil sebagai berikut -

Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby

require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

Ini akan menghasilkan hasil sebagai berikut -

&lt;h1&gt;Zara Ali/A Sweet & Sour Girl&lt;/h1&gt;'

Metode Berguna di Kelas CGI

Berikut adalah daftar metode yang terkait dengan kelas CGI -

  • The Ruby CGI - Metode yang terkait dengan Standar CGI perpustakaan.

Cookie dan Sesi

Kami telah menjelaskan kedua konsep ini di bagian yang berbeda. Silakan ikuti bagian -

  • The Ruby CGI Cookies - Bagaimana menangani Cookies CGI.

  • The Ruby CGI Sesi - Bagaimana mengelola sesi CGI.

Server Web Hosting

Anda dapat memeriksa topik berikut di internet untuk meng-host situs web Anda di Server berbasis Unix -

  • Hosting web berbasis Unix