Applicazioni Web Ruby - Programmazione CGI

Ruby è un linguaggio generico; non può essere propriamente chiamato linguaggio web . Anche così, le applicazioni web e gli strumenti web in generale sono tra gli usi più comuni di Ruby.

Non solo puoi scrivere il tuo server SMTP, demone FTP o server Web in Ruby, ma puoi anche usare Ruby per attività più comuni come la programmazione CGI o come sostituto di PHP.

Si prega di trascorrere qualche minuto con CGI Programming Tutorial per maggiori dettagli sulla programmazione CGI.

Scrittura di script CGI

Lo script CGI di Ruby più semplice si presenta così:

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

Se chiami questo script test.cgi e lo carichi su un provider di hosting Web basato su Unix con le giuste autorizzazioni, puoi usarlo come script CGI.

Ad esempio, se hai il sito Web https://www.example.com/ospitato con un provider di hosting Web Linux e carichi test.cgi nella directory principale e gli dai i permessi di esecuzione, quindi visitihttps://www.example.com/test.cgi dovrebbe restituire una pagina HTML che dice This is a test.

Qui, quando test.cgi viene richiesto da un browser Web, il server Web cerca test.cgi sul sito Web, quindi lo esegue utilizzando l'interprete Ruby. Lo script Ruby restituisce un'intestazione HTTP di base e quindi restituisce un documento HTML di base.

Utilizzando cgi.rb

Ruby viene fornito con una libreria speciale chiamata cgi che consente interazioni più sofisticate rispetto a quelle con lo script CGI precedente.

Creiamo uno script CGI di base che utilizzi cgi -

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

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

Qui, hai creato un oggetto CGI e lo hai usato per stampare la riga di intestazione per te.

Elaborazione del modulo

L'uso della classe CGI ti dà accesso ai parametri di query HTML in due modi. Supponiamo che ci venga fornito un URL di /cgi-bin/test.cgi?FirstName = Zara & LastName = Ali.

È possibile accedere ai parametri FirstName e LastName utilizzando CGI # [] direttamente come segue:

#!/usr/bin/ruby

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

C'è un altro modo per accedere a queste variabili del modulo. Questo codice ti darà un hash di tutte le chiavi e i valori -

#!/usr/bin/ruby

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

Di seguito è riportato il codice per recuperare tutte le chiavi:

#!/usr/bin/ruby

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

Se un modulo contiene più campi con lo stesso nome, i valori corrispondenti verranno restituiti allo script come un array. La funzione di accesso [] restituisce solo il primo di these.index il risultato del metodo params per ottenerli tutti.

In questo esempio, supponi che il modulo abbia tre campi chiamati "nome" e abbiamo inserito tre nomi "Zara", "Huma" e "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 si prenderà cura dei metodi GET e POST automaticamente. Non esiste un trattamento separato per questi due metodi diversi.

Un modulo associato, ma di base, che potrebbe inviare i dati corretti avrebbe il codice HTML in questo modo:

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

Creazione di moduli e HTML

CGI contiene un numero enorme di metodi utilizzati per creare HTML. Troverai un metodo per tag. Per abilitare questi metodi, è necessario creare un oggetto CGI chiamando CGI.new.

Per rendere più facile la nidificazione dei tag, questi metodi prendono il loro contenuto come blocchi di codice. I blocchi di codice dovrebbero restituire una stringa , che verrà utilizzata come contenuto per il tag. Ad esempio:

#!/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- Il metodo form della classe CGI può accettare un parametro di metodo, che imposterà il metodo HTTP (GET, POST e così via ...) da utilizzare durante l'invio del modulo. L'impostazione predefinita, utilizzata in questo esempio, è POST.

Questo produrrà il seguente risultato:

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>

Citando stringhe

Quando si tratta di URL e codice HTML, è necessario fare attenzione a citare alcuni caratteri. Ad esempio, un carattere barra (/) ha un significato speciale in un URL, quindi deve esserloescaped se non fa parte del percorso.

Ad esempio, qualsiasi / nella porzione di query dell'URL verrà tradotta nella stringa% 2F e dovrà essere tradotta di nuovo in una / per poterla utilizzare. Anche lo spazio e la e commerciale sono caratteri speciali. Per gestire questo, CGI fornisce le routineCGI.escape e CGI.unescape.

#!/usr/bin/ruby

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

Questo produrrà il seguente risultato:

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

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

Questo produrrà il seguente risultato:

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

Metodi utili nella classe CGI

Ecco l'elenco dei metodi relativi alla classe CGI -

  • The Ruby CGI - Metodi relativi alla libreria CGI standard.

Cookie e sessioni

Abbiamo spiegato questi due concetti in diverse sezioni. Si prega di seguire le sezioni -

Server di hosting web

È possibile controllare il seguente argomento su Internet per ospitare il proprio sito Web su un server basato su Unix: