Ruby Web Applications - การเขียนโปรแกรม CGI
Ruby เป็นภาษาที่ใช้งานทั่วไป มันไม่สามารถเรียกได้อย่างถูกต้องว่าเป็นภาษาเว็บเลย ถึงกระนั้นแอปพลิเคชันเว็บและเครื่องมือเว็บโดยทั่วไปก็เป็นหนึ่งในการใช้งานที่พบบ่อยที่สุดของ Ruby
ไม่เพียง แต่คุณสามารถเขียนเซิร์ฟเวอร์ SMTP, FTP daemon หรือเว็บเซิร์ฟเวอร์ของคุณเองใน Ruby ได้ แต่คุณยังสามารถใช้ Ruby สำหรับงานปกติอื่น ๆ เช่นการเขียนโปรแกรม CGI หรือใช้แทน PHP
โปรดใช้เวลาสองสามนาทีในการสอนการเขียนโปรแกรม CGIเพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับการเขียนโปรแกรม CGI
การเขียนสคริปต์ CGI
สคริปต์ Ruby CGI พื้นฐานที่สุดมีลักษณะดังนี้ -
#!/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>"
หากคุณเรียกสคริปต์นี้ว่าtest.cgiและอัปโหลดไปยังผู้ให้บริการเว็บโฮสติ้งที่ใช้ Unix โดยมีสิทธิ์ที่ถูกต้องคุณสามารถใช้เป็นสคริปต์ CGI ได้
ตัวอย่างเช่นหากคุณมีเว็บไซต์ https://www.example.com/โฮสต์กับผู้ให้บริการเว็บโฮสติ้ง Linux และคุณอัปโหลดtest.cgiไปยังไดเร็กทอรีหลักและให้สิทธิ์ดำเนินการจากนั้นไปที่https://www.example.com/test.cgi ควรส่งคืนหน้า HTML ว่า This is a test.
ที่นี่เมื่อมีการร้องขอtest.cgiจากเว็บเบราว์เซอร์เว็บเซิร์ฟเวอร์จะค้นหาtest.cgiบนเว็บไซต์จากนั้นเรียกใช้งานโดยใช้ตัวแปล Ruby สคริปต์ Ruby ส่งคืนส่วนหัว HTTP พื้นฐานจากนั้นส่งคืนเอกสาร HTML พื้นฐาน
ใช้ cgi.rb
Ruby มาพร้อมกับห้องสมุดพิเศษที่เรียกว่า cgi ที่ช่วยให้การโต้ตอบที่ซับซ้อนมากกว่าการโต้ตอบที่มีสคริปต์ CGI ก่อนหน้านี้
มาสร้างสคริปต์ CGI พื้นฐานที่ใช้ cgi -
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
puts cgi.header
puts "<html><body>This is a test</body></html>"
ที่นี่คุณสร้างวัตถุ CGI และใช้เพื่อพิมพ์บรรทัดส่วนหัวให้คุณ
การประมวลผลแบบฟอร์ม
การใช้คลาส CGI ช่วยให้คุณเข้าถึงพารามิเตอร์คิวรี HTML ได้สองวิธี สมมติว่าเราได้รับ URL เป็น /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali
คุณสามารถเข้าถึงพารามิเตอร์FirstNameและLastNameโดยใช้ CGI # [] ได้โดยตรงดังนี้ -
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi['FirstName'] # => ["Zara"]
cgi['LastName'] # => ["Ali"]
มีอีกวิธีหนึ่งในการเข้าถึงตัวแปรฟอร์มเหล่านี้ รหัสนี้จะให้แฮชของคีย์และค่าทั้งหมด -
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName'] # => ["Zara"]
h['LastName'] # => ["Ali"]
ต่อไปนี้เป็นรหัสสำหรับดึงคีย์ทั้งหมด -
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi.keys # => ["FirstName", "LastName"]
หากฟอร์มมีหลายเขตข้อมูลที่มีชื่อเดียวกันค่าที่เกี่ยวข้องจะถูกส่งกลับไปยังสคริปต์เป็นอาร์เรย์ accessor [] ส่งคืนค่าแรกของสิ่งเหล่านี้ดัชนีผลลัพธ์ของเมธอด params เพื่อรับทั้งหมด
ในตัวอย่างนี้สมมติว่าแบบฟอร์มมีสามฟิลด์ที่เรียกว่า "ชื่อ" และเราป้อนสามชื่อ "Zara", "Huma" และ "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 จะดูแลวิธีการ GET และ POST โดยอัตโนมัติ ไม่มีการรักษาแยกกันสำหรับทั้งสองวิธีที่แตกต่างกัน
รูปแบบที่เกี่ยวข้อง แต่เป็นพื้นฐานที่สามารถส่งข้อมูลที่ถูกต้องจะมีรหัส HTML ดังนี้ -
<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>
การสร้างฟอร์มและ HTML
CGI มีวิธีการมากมายที่ใช้ในการสร้าง HTML คุณจะพบหนึ่งวิธีต่อแท็ก ในการเปิดใช้งานวิธีการเหล่านี้คุณต้องสร้างวัตถุ CGI โดยเรียกใช้ CGI.new
เพื่อให้การซ้อนแท็กง่ายขึ้นวิธีการเหล่านี้ใช้เนื้อหาเป็นบล็อกโค้ด บล็อกโค้ดควรส่งคืนสตริงซึ่งจะใช้เป็นเนื้อหาสำหรับแท็ก ตัวอย่างเช่น -
#!/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- เมธอดฟอร์มของคลาส CGI สามารถยอมรับพารามิเตอร์เมธอดซึ่งจะตั้งค่าเมธอด HTTP (GET, POST และอื่น ๆ ... ) ที่จะใช้กับการส่งแบบฟอร์ม ค่าเริ่มต้นที่ใช้ในตัวอย่างนี้คือ POST
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
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>
การอ้างอิงสตริง
เมื่อจัดการกับ URL และโค้ด HTML คุณต้องระมัดระวังในการอ้างอิงอักขระบางตัว ตัวอย่างเช่นอักขระสแลช (/) มีความหมายพิเศษใน URL ดังนั้นจึงต้องเป็นescaped หากไม่ใช่ส่วนหนึ่งของชื่อพา ธ
ตัวอย่างเช่น / ในส่วนข้อความค้นหาของ URL จะถูกแปลเป็นสตริง% 2F และต้องแปลกลับเป็น / เพื่อให้คุณใช้งานได้ ช่องว่างและเครื่องหมายและยังเป็นอักขระพิเศษ เพื่อจัดการกับสิ่งนี้ CGI จัดเตรียมกิจวัตรCGI.escape และ CGI.unescape.
#!/usr/bin/ruby
require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
วิธีการที่เป็นประโยชน์ในคลาส CGI
นี่คือรายการวิธีการที่เกี่ยวข้องกับคลาส CGI -
ทับทิม CGI - วิธีการที่เกี่ยวข้องกับห้องสมุด CGI มาตรฐาน
คุกกี้และเซสชัน
เราได้อธิบายแนวคิดทั้งสองนี้ในส่วนต่างๆ โปรดปฏิบัติตามส่วน -
ทับทิม CGI คุกกี้ - วิธีการจัดการกับ CGI คุกกี้
The Ruby CGI Sessions - วิธีจัดการเซสชัน CGI
เซิร์ฟเวอร์เว็บโฮสติ้ง
คุณสามารถตรวจสอบหัวข้อต่อไปนี้บนอินเทอร์เน็ตเพื่อโฮสต์เว็บไซต์ของคุณบนเซิร์ฟเวอร์ที่ใช้ Unix -
เว็บโฮสติ้งที่ใช้ Unix