Wie schreibe ich ein "Hello, World" CGI mit Rebol 3?

8

Beginnen wir mit etwas Einfachem: einem Formular mit einem Feld, das wiederholt wird.

    
dt2 02.01.2013, 14:15
quelle

1 Antwort

11

Zum Zeitpunkt des Schreibens (2013-01) fehlen Rebol 3 noch die paar CGI-unterstützenden Funktionen, die mit Rebol 2 gebündelt wurden. Wenn es Ihnen aber gut geht, die fehlende CGI-Unterstützung selbst zu hacken, können Sie trotzdem geh sofort.

Bevor wir beginnen, müssen Sie die R3-Binärdatei auf der Maschine speichern, auf der Sie Ihr CGI ausführen möchten, und Sie müssen den vollständigen Pfad zu Ihrer Ablage kennen (der Einfachheit halber). Die folgenden Beispiele gehen von einer Unix-Maschine mit der R3-Binärdatei in /usr/local/bin/rebol3 aus.

Fangen wir mit etwas noch Einfachem an als Sie angefordert haben: ein CGI sendet gerade ein "Hello, World!" Seite:

%Vor%

Dies ist identisch mit dem, was Sie in R2 schreiben würden.

Weiter zu etwas etwas Interessanterem : Lesen und Parsen eines HTML-Formulars, wie Sie es gewünscht haben.

Dazu müssen wir zwei Dinge über CGI wissen: Die übermittelten Daten werden als Standardeingabe an das CGI übergeben; Andere CGI-spezifische Informationen werden vom Webserver über Umgebungsvariablen übergeben. Wir können auf die Eingabedaten in R3 über den Port system/ports/input zugreifen und Umgebungsvariablen mithilfe von get-env nativ lesen.

Lassen Sie uns das HTML-Formular selbst in das CGI einbetten und einen Moduswechsel innerhalb des CGI vornehmen: Wenn keine Daten eingereicht wurden, zeigen Sie das HTML-Formular an; Wenn Daten eingereicht wurden, verarbeiten Sie sie und zeigen Sie eine entsprechende Antwort an. Wir können dies tun, indem wir ein Formular schreiben, das Daten über die HTTP-Methode POST übermittelt, und dann innerhalb des CGI überprüft, ob es über die HTTP-Methode GET (keine Daten) oder POST (Formulardaten) aufgerufen wurde. Die Methode, mit der ein CGI-Skript aufgerufen wurde, ist über die Umgebungsvariable REQUEST_METHOD verfügbar.

Bei allem, was gesagt wurde, hier ist das vollständige Skript ohne weiteres:

%Vor%

Das letzte Stück, um dieses Skript zu verstehen, ist, wie HTML-Formulardaten, die an das CGI gesendet werden, analysiert werden. Rebol 2 hatte dafür eine decode-cgi Hilfsfunktion, die Rebol 3 momentan nicht besitzt.

Für grundlegende Formulare reicht es jedoch zu wissen, dass CGI-Daten in einer Codierung gesendet werden, die Felder mit & und den Namen und Wert des Felds mit = ; Alles ist URL-codiert. Wenn wir also das oben eingebettete Formular mit einem Wert von "Charlie" einreichen, erhält das CGI field=Charlie als Eingabe. Das Senden von "Foo Bar" sendet "field = Foo% 20Bar". Also noch einmal: Für Basisformen reicht die Kombination von parse ... "&=" (zum Aufteilen von Feldern und Feldnamen und Werten) und dehex (zum Dekodieren der URL-Codierung) wie oben gezeigt aus.

    
earl 06.01.2013, 17:16
quelle

Tags und Links