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

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

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

วิธีการที่เป็นประโยชน์ในคลาส CGI

นี่คือรายการวิธีการที่เกี่ยวข้องกับคลาส CGI -

  • ทับทิม CGI - วิธีการที่เกี่ยวข้องกับห้องสมุด CGI มาตรฐาน

คุกกี้และเซสชัน

เราได้อธิบายแนวคิดทั้งสองนี้ในส่วนต่างๆ โปรดปฏิบัติตามส่วน -

  • ทับทิม CGI คุกกี้ - วิธีการจัดการกับ CGI คุกกี้

  • The Ruby CGI Sessions - วิธีจัดการเซสชัน CGI

เซิร์ฟเวอร์เว็บโฮสติ้ง

คุณสามารถตรวจสอบหัวข้อต่อไปนี้บนอินเทอร์เน็ตเพื่อโฮสต์เว็บไซต์ของคุณบนเซิร์ฟเวอร์ที่ใช้ Unix -

  • เว็บโฮสติ้งที่ใช้ Unix