Pengaturcaraan Ruby CGI


Ruby ialah bahasa universal, bukan sahaja bahasa yang digunakan untuk pembangunan WEB, tetapi Ruby ialah bahasa yang paling biasa dalam pembangunan aplikasi WEB dan alatan WEB.

Menggunakan Ruby, anda bukan sahaja boleh menulis pelayan SMTP anda sendiri, program FTP atau pelayan web Ruby, tetapi anda juga boleh menggunakan Ruby untuk pengaturcaraan CGI.

Seterusnya, mari luangkan sedikit masa untuk mempelajari pengeditan CGI Ruby.


Semakan imbas web

Untuk lebih memahami cara CGI berfungsi, kita boleh mulakan dengan proses mengklik pautan atau URL pada halaman web:

  • 1 Gunakan penyemak imbas anda untuk mengakses URL dan menyambung ke pelayan web HTTP.

  • 2. Selepas menerima maklumat permintaan, pelayan web akan menghuraikan URL dan menyemak sama ada fail yang diakses wujud pada pelayan Jika fail itu wujud, kembalikan kandungan fail tersebut. jika tidak mesej ralat akan dikembalikan.

  • 3. Penyemak imbas menerima maklumat daripada pelayan dan memaparkan fail atau mesej ralat yang diterima.

Atur cara CGI boleh menjadi skrip Ruby, skrip Python, skrip PERL, skrip SHELL, program C atau C++, dsb.


Rajah seni bina CGI

cgiarch1.gif


Sokongan dan konfigurasi pelayan web

Sebelum anda melakukan pengaturcaraan CGI, pastikan anda Pelayan web menyokong CGI dan mempunyai pengendali CGI dikonfigurasikan.

Apache menyokong konfigurasi CGI:

Sediakan direktori CGI:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

Semua program CGI pelaksanaan pelayan HTTP disimpan dalam direktori pra-konfigurasi. Direktori ini dipanggil direktori CGI, dan mengikut konvensyen, ia dinamakan /var/www/cgi-bin.

Fail CGI mempunyai sambungan .cgi dan Ruby juga boleh menggunakan sambungan .rb.

Secara lalai, direktori cgi-bin tempat pelayan Linux dikonfigurasikan untuk dijalankan ialah /var/www.

Jika anda ingin menentukan direktori lain untuk menjalankan skrip CGI, anda boleh mengubah suai fail konfigurasi httpd.conf seperti berikut:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options +ExecCGI
   Order allow,deny
   Allow from all
</Directory>

Tambah akhiran .rb dalam AddHandler supaya kami boleh mengaksesnya . Fail skrip Ruby yang berakhir dengan rb:

AddHandler cgi-script .cgi .pl .rb

Menulis skrip CGI

Kod CGI Ruby yang paling asas adalah seperti berikut:

#!/usr/bin/ruby

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

Anda boleh menyimpan kod ini untuk Dalam fail test.cgi, anda boleh melaksanakannya sebagai skrip CGI selepas pergi ke pelayan kali terakhir dan memberikan kebenaran yang mencukupi.

Jika alamat tapak anda ialah http://www.example.com/, anda boleh menggunakan http://www.example.com/test.cgi untuk mengakses program ini. "Ini adalah ujian."

Selepas penyemak imbas mengakses URL, pelayan web akan menemui fail test.cgi dalam direktori tapak, dan kemudian menggunakan penghurai Ruby untuk menghuraikan kod skrip dan mengakses dokumen HTML.


Gunakan cgi.rb

Ruby boleh menghubungi perpustakaan CGI untuk menulis skrip CGI yang lebih kompleks.

Kod berikut memanggil pustaka CGI untuk mencipta skrip CGI skrip.

#!/usr/bin/ruby

require 'cgi'

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

Dalam kod berikut, objek CGI dicipta dan maklumat pengepala dicetak.


Pemprosesan borang

Menggunakan perpustakaan CGI, anda boleh mendapatkan data daripada penyerahan borang (atau parameter dalam URL) dalam dua cara, Contohnya URL:/cgi-bin/test.cgi?FirstName=Zara&LastName=Ali.

Anda boleh menggunakan CGI#[] untuk mendapatkan terus parameter FirstName dan LastName:

#!/usr/bin/ruby

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

Cara lain untuk mendapatkan data borang:

#!/usr/bin/ruby

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

Kod berikut digunakan untuk mendapatkan semua nilai utama :

#!/usr/bin/ruby

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

Jika borang mengandungi berbilang medan dengan nama yang sama, nilai medan yang sama akan disimpan dalam tatasusunan.

Dalam contoh berikut, tiga medan yang sama "nama" dinyatakan dalam borang dan nilainya ialah "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"]}

Nota:Ruby akan menentukan kaedah GET dan POST secara automatik, jadi tidak perlu merawat kedua-dua kaedah secara berbeza.

Berikut ialah kod HML yang berkaitan:

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

Mencipta borang Borang dan HTML

CGI mengandungi sejumlah besar kaedah untuk mencipta HTML, setiap tag HTML mempunyai kaedah yang sepadan. Sebelum menggunakan kaedah ini, objek CGI mesti dibuat melalui CGI.new.

Untuk memudahkan sarang teg, kaedah ini menganggap kandungan sebagai blok kod dan blok kod akan mengembalikan rentetan sebagai kandungan teg. Seperti yang ditunjukkan di bawah:

#!/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
         }
      }
   }
}

String Escape

Apabila anda memproses parameter dalam URL atau data borang HTML, anda perlu melarikan diri daripada aksara khas yang ditentukan, seperti: Tanda petikan ( "), backslash (/).

Objek Ruby CGI menyediakan kaedah CGI.escape dan CGI.unescape untuk mengendalikan melarikan diri aksara khas ini:

#!/usr/bin/ruby

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

Kod di atas dilaksanakan Hasilnya adalah seperti berikut:

#!/usr/bin/ruby

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

Satu lagi set contoh:

#!/usr/bin/ruby

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

Keputusan pelaksanaan kod di atas adalah seperti berikut:

<h1>Zara Ali/A Sweet & Sour Girl</h1>'

Kaedah yang biasa digunakan dalam kelas CGI

Berikut ialah kaedah berkaitan kelas CGI lengkap dalam Ruby

  • Ruby CGI - kaedah berkaitan perpustakaan CGI standard


Kuki dan Sesi

  • Kuki CGI Ruby - Cara mengendalikan Kuki CGI.

  • Sesi CGI Ruby - Cara mengendalikan sesi CGI.