Anleitung zum Schreiben von CGI-Skripten in Perl und REXX


Guide to Writing CGI Scripts in REXX and Perl
Copyright © By Les Cottrell
For original English text, go to:

http://www.slac.stanford.edu/slac/www/resource/how-to-use/cgi-rexx/

Diese Anleitung ist für Leute, die ihre eigenen WWW ausführbare Skripte mit dem WWW Common Gateway Interface schreiben wollen bestimmt sind ( CGI ). Obwohl der Schwerpunkt liegt auf REXX bietet auch viele Beispiele in Perl.

gibt es einige einfache Software-Bibliothek, die Schreiben von CGI-Skripte erleichtert. CGI-lib.rxx ist eine Bibliothek von REXX-Funktionen (verfügbar am SLAC mit Hilfe der REXX
AUFRUF putenv "REXXPATH = / AFS / SLAC / WWW / SLAC / WWW / tools / CGI-Rexx"
Anweisung, um die Bibliothek zur Laufzeit enthalten), und CGI-lib.pl ähnlich einer Bibliothek in Perl, Steve Brenner (geschrieben haben, eine Kopie der Bibliothek am SLAC getan in / AFS / SLAC / g / www / cgi-lib / cgi-lib.pl). NCSA ist ein sehr nützliches Set von CGI-Handler-Routinen Perl, dass per anonymem FTP . Ein weiterer Satz von Perl-CGI-Skripte Server von Brigitte Jellinek geschrieben steht unter der GNU Public License erhältlich . Es gibt auch www.stanford.edu Quellcode für Skripte und Programme . Es gibt auch Perl-Code WWW-Programm gesammelten Earl Hood. Schließlich Ch. Center-Entwicklung.

Da es Sicherheits-und andere Risiken im Zusammenhang mit der Umsetzung der eigenen Scripts in Web-Server verbunden sind, kann der Leser möchte zuerst ansehen möchten ein Dokument mit Informationen über SLAC Security Wrapper für die” CGI Anwendungsszenarien. Neben der Verbesserung der Sicherheit, diese Wrapper vereinfacht auch die Aufgabe des Schreibens ein CGI-Skript für Anfänger.

vor dem Schreiben des Skripts können Sie auch überprüfen, einige grobe Skizzen auf SLAC Web Dienstprogramme von CGI-Scripts.

CGI ist eine Schnittstelle, um externe Programme oder Gateways unter einem Informations-Server. Derzeit unterstützte Daten-Servern HTTP -Server (WWW-Protokoll verwendet wird).

Gateway-Programm ausführbare Programme (zum Beispiel Skripte UNIX), die von ihnen selbst betrieben werden (aber man möchte nicht, außer für Debugging-Zwecke) können. Sie wurden gemacht, damit sie in einer anderen (vielleicht ganz andere) Informationen Austauschbarkeit Servern arbeiten. Gateway-Programme relevant für diese Spezifikation kann in jeder Sprache geschrieben werden, einschließlich REXX oder Perl, die eine ausführbare Datei

Der Eingang kann an das Skript auf verschiedene Weise je nach Client Uniform Resource Locator ( URL ) oder HyperText Markup Language ( HTML )

  • QUERY_STRING Umgebungsvariablen QUERY_STRING ist definiert als alles sollte in erster Linie sein? in der URL verwendet, um das Gateway zugreifen. Diese Informationen können dem Dokument HTML ISINDEX, oder eine Form von HTML (mit einer GET-Aktion) hinzugefügt werden. Es kann auch manuell in der Link HTML oder Anker, gesetzt werden, dass bezieht sich auf Ihrem Gateway. Diese Linie, die in der Regel Informationen Anfrage, zum Beispiel, dass der Benutzer es wünscht, um die Datenbanken zu suchen, oder vielleicht kodiert Ergebnisse Ihrer Feedback-Formular. Es kann in REXX zugegriffen werden mit Hilfe String = getenv ('QUERY_STRING')
    oder in Perl mit Hilfe der

    $ string = $ ENV ('QUERY_STRING');

    Dieser String wird in der Standard-Format der URL, die den Raum verändert, um +, sowie der Codierung von Sonderzeichen mit einem hexadezimalen Codierung von XX% codiert. Sie haben es zu entschlüsseln, es zu benutzen. Sie können CGI-lib.rxx REXX BESTELLEN DeWeb oder Perl Code-Snippet, mit Beispielen wie Sie die Sonderzeichen zu decodieren.

    Wenn Ihr Server nicht decodieren hat die Ergebnisse des Formulars erhalten Sie auch die Query-String für Sie die Befehlszeile zu dekodieren. Dies bedeutet, dass der Query-String verfügbar sein wird in REXX über PARSE ARG -Befehl oder in Perl

    $ ARGV [n] Array.

    Zum Beispiel, wenn Sie eine URL

    http://www.slac.stanford.edu/cgi-bin/foo?hello+world

    und verwenden Sie die REXX PARSE ARG arg1 arg2 ist Arg1 enthält "Hallo" und Arg2 die "Welt" (dh “+”-Zeichen wird durch ein Leerzeichen ersetzt).
    In Perl $ ARGV [1] enthält "Hallo" und $ argv [2] enthält "Welt" . Wenn Sie die Befehlszeile verwenden, um die Eingabe zugreifen wollen, müssen Sie weniger tun, die Verarbeitung der Daten vor dem Einsatz.

  • PATH_INFO -UmgebungsvariableDie meisten der Zeit, möchten Sie Daten an das Gateway, dass der Client nicht verderben eins zu schicken. Solche Informationen können den Namen des Formulars, generiert Ergebnisse, die sie senden werden.CGI erlaubt es zusätzliche Informationen, um in der URL für Ihr Gateway, die verwendet werden, um zusätzliche Informationen im Zusammenhang mit einem bestimmten Szenario senden können eingebettet werden. Diese Information ist in der Regel als “Extra”-Informationen nach dem Pfad Ihres Gateways in der URL zur Verfügung. Diese Informationen werden vom Server nicht in jedem Fall codiert. Es kann in REXX zugegriffen werden mittels String = getenv ('PATH_INFO') , oder in Perl mit $ string = $ ENV ('PATH_INFO'); Um dies zu verdeutlichen: Angenommen, ich ein Skript, CGI, das auf meinem Server mit dem Namen foo ist zu haben. Als ich Foo Zugriff auf ein bestimmtes Dokument, möchte ich sagen, dass ich derzeit Foo in der englischen Sprache Verzeichnis bin, nicht ein Katalog von Pig Latin. In diesem Fall könnte ich Zugriff auf Ihr Skript in der HTML-Dokument, zum Beispiel:

    foo

    Wenn der Server Fu, es wird mir geben PATH_INFO zu / language = Englisch , und mein Programm kann sie zu entschlüsseln und entsprechend handeln.

    PATH_INFO und QUERY_STRING können kombiniert werden. Zum Beispiel, URL:

    http://www/cgi-bin/htimage/usr/www/img/map?404, 451

    führen, den Server, um das Skript htimage laufen. Er wird die verbleibende Pfadinformationen

    / Usr / www / img / map ” zu htimage Umgebungsvariable PATH_INFO, und übergeben “ 405.451 ” in der Umgebungsvariablen QUERY_STRING. In diesem Fall htimage ist ein Skript für eine aktive Karte mit dem CERN httpd geliefert.

  • Standard Input <p Wenn Ihre Form hat METHOD = “POST” in Ihrem Formular-Tag, Ihre CGI-Programm wird die Eingabe verschlüsselter Form auf der Standardeingabe zu empfangen ( stdin in Unix). Der Server sendet keine EOF am Ende der Daten, sondern Sie müssen die Umgebungsvariable CONTENT_LENGTH verwenden, um festzustellen, wie viele Daten Sie von der Standardeingabe gelesen haben. Sie können dies tun in REXX mitIn Charin = (, 1, getenv ('CONTENT_LENGTH')) , oder in Perl mit Hilfe der read (STDIN, $ in, $ ENV {'CONTENT_LENGTH'});

    Wenn Sie über die Standard-Eingabe für ein anderes Skript, die Sie später anrufen gehen wollen, dann könnten Sie die CGI-lib.rxx REXX VERFAHREN leseBeitrag.

Sie können REXX-Code-Snippet anzuzeigen, indem er ein Beispiel, wie die verschiedenen Formen der Eingang in das Skript zu lesen.

REXX Prozeduren <a mit <a und <a alle in CGI-lib.rxx, kann verwendet werden, um die Aufgabe des Lesens Eingabe aus einem Formular zu vereinfachen.

Wenn Sie das Schreiben Formen sind, hat jeder Ihrer Eingangszollstellen Name -Tag. Wenn der Benutzer die Daten stellt in dieser Elemente in einer Form, die die Informationen in Form von Daten codiert wird. Der Wert von jedem der Input-Elemente vom Benutzer angegebene Wert ist .

Form der Datenfluss Name = Wert -Paare getrennt durch ein kaufmännisches Und (&) Zeichen. Jeder Name = Wert ein paar URL-kodiert, also Leerzeichen werden in Zeichen verwandelt “plus” und einige Zeichen werden hexadezimal kodiert. So entschlüsseln Sie die Formulardaten, müssen Sie zunächst analysieren den Datenblock in der Form eines separaten Name = Wert-Paaren zu werfen, ein kaufmännisches. Dann müssen Sie jedes Paar Name = Wert in einem separaten Name und Wert. Verwenden Sie das erste Zeichen der Gleichheit bei Ihnen aufgetreten ist aufgeteilt analysieren die Daten. Wenn es mehr als eine, dann stimmt etwas nicht mit den Daten. Auch hier werfen die Gleichheitszeichen. Schließlich URL-Kodierung von jeder widerrufen Name und Wert. <a

Sie sehen können HREF=”cgi-form.html”> REXX oder Perl Code-Snippet, von Vorbildern der Decodierung das Eingabeformular. Mit

Name und Wert in das Skript ein, sollten Sie wissen, dass:

  • nicht diktieren, in welcher Reihenfolge die Namen = Wert wird in zusammengefügt werden;
  • Nicht jeder Name und Wert definiert in der Form durch den Kunden erforderlich geschickt, so als ob nichts nicht in der Auswahlliste ausgewählt, dann wird keine Namen, oder Wert wird gesendet;
  • mehr als einen Wert kann auf den Namen gerichtet werden , zum Beispiel, wenn Scroll-Liste können Sie aus verschiedenen Optionen wählen.

    CGI-Programme können eine Reihe von Dokument-Typen zurück. Sie können das Bild an den Client zurückgegeben werden, ist das Dokument, HTML-, Text-Dokument, Postscript-Dokumente, oder vielleicht sogar ein Audio-Clip von Ihrer körperlichen Funktionen. Sie können auch wieder Verknüpfungen mit anderen Dokumenten (um Platz zu sparen werden wir den letzteren Fall hier ignorieren, können weitere Informationen gefunden werden

    in CGI-Primer die NCSA). Der Kunde muss wissen, welche Dokumente, die Sie senden ihn, damit er sie angemessen zu präsentieren. Damit ein Client, den Sie kennen Ihre CGI-Programm müssen Sie den Server des Dokuments, was es zurückgegeben wird, geben Sie erzählen.

    Um den Server zu sagen, was Dokument, das Sie zurück schicken, erfordert CGI Sie einen kurzen Titel am Ausgang zu platzieren. Dieser Header ist ASCII-Text, bestehend aus Leitungen, getrennt entweder durch Zeilenumbrüche oder Wagenrücklauf durch Zeilenumbrüche gefolgt. Ihr Skript sollte zu mindestens zwei solcher Linien, bevor seine Daten direkt an den Client gesendet werden. Diese Linien werden verwendet, um anzuzeigen MIME-Typ der folgenden Dokumente

    Einige gängigen MIME, im Zusammenhang mit dem WWW sind:

  • "text" Content-Type, die verwendet werden, um Textinformationen in einer Reihe von Zeichensätzen und formatierten Text Beschreibungssprachen in einem standardisierten vertreten wird Form. Die zwei wahrscheinlichsten Subtypen:
  • text / plain : Der Text ohne besondere Formatierungen.
  • text / html : Text mit eingebetteten HTML-Befehle
  • "Anwendung" Content-Type, die zur Anwendung von Daten-oder Binär-Daten übertragen wird. Zwei häufig verwendete Subtypen:
  • application / postscript :. Daten PostScript, und muss in interptreter PostScript eingereicht werden
  • application / binären : die Daten in einer unbekannten binären Format, zum Beispiel die Ergebnisse der Datenübertragung ermöglicht.
  • "Bild" Content-Type für die Übertragung von Standbildern (Fotos) von Daten. Es gibt viele mögliche Subtypen, aber die am häufigsten im WWW verwendet werden, sind:
  • image / gif : Bild im GIF.
  • image / xbm : ein Rasterbild X.
  • image / jpeg : Bildformat ist JPEG.Wenn Sie Ihren Server auf den Content-Typ Ihrer Ausgabe wünschen, die erste Zeile der Ausgabe sollte lauten: Content-type: Typ / Subtyp wo Typ / Subtyp

    ein MIME-Typ und-Subtyp für Ihr Ausgabegerät.

    Als nächstes müssen Sie eine zweite Zeile zu schicken. Mit der aktuellen Spezifikation, sollte die zweite Zeile leer sein. Dies bedeutet, dass es nichts außer einem Zeilenumbruch zu haben. Sobald der Server empfängt diese Linie, er weiß, dass Sie über Ihre Server-Ausgabe dem Sprechen fertig sind und die eigentliche Produktion beginnt. Wenn Sie diese Zeichenfolge überspringen, wird der Server versuchen und analysieren Sie Ihren Weg und versuchte, mehr Informationen über Ihre Anfrage zu finden, und du wirst sehr unglücklich. Sie können

    HREF=”cgi-type.html”> REXX-Code-Snippet , indem er ein Beispiel für die Verarbeitung Content-type Informationen.

    Nach diesen beiden Linien angezeigt werden, keinen Zugang zu stdout (zum Beispiel sagen Sie den Befehl REXX)? wird in einem Dokument an den Client gesendet einbezogen werden. Diese Ausgabe sollte in Übereinstimmung mit Content-type -Header sein. Zum Beispiel, wenn der Titel Content-Type text / html angezeigt wird, dann wird die folgende Ausgabe sollte auch HTML-Formatierungen, wie zB den Einsatz von
    oder

    , um eine neue Zeile zu beginnen oder

     , um die automatische Formatierung von HTML zu entfernen.
    

    Da stdout enthalten in einem Dokument an, sagte Diagnose-, Diagnose-Ausgabe des Befehls, wird im Dokument angezeigt werden. Sie können REXX-Code-Snippet , indem er ein Beispiel für die Befundung anzuzeigen. Wenn Fehler festgestellt werden (z. B. keine Einsendungen, ungültige Zeichen gefunden, zu viele Argumente angegeben, forderte ungültigen Befehl ausgeführt werden soll, wird ein Fehler in Parameter oder undefinierte Variable wird in der Schrift begegnet REXX)? Skript sollte detaillierte Informationen zu liefern was falsch ist, etc. Dies kann sehr nützlich sein, um Informationen über die verschiedenen Einstellungen WWW Umgebungsvariablen , die installiert werden können. <a <A und myURL REXX-Prozeduren in CGI-lib.rxx bieten wenig Hilfe für Fehlermeldungen. Weitere Überprüfung der REXX-Code-Snippets <a CGIerror und <a CGIdie sowie die Ausgabe eines typischen CGIerror und CGIdie Steckdose .

    auf Ihren Webserver zu bekommen, um das Skript CGI laufen, sollten Sie:
  • Schreiben Sie ein Skript. Um diese Prozedur zu vereinfachen, können Sie CGI-lib.rxx verwenden Bibliothek Funktionen, einschließlich der vorher auf dieser Seite eingetragen. Ein paar einfache, aber voll von Beispielen, kann helfen:
    1. Quelle im Skript zu aktivieren UNIX Finger Funktionen.
    2. Quelle auf niedrigste Form des HTTP und Skripte .
  • Mach das Skript ausführbar auf einem Webserver. Am SLAC der Unix wird dies mit chmod Team, zum Beispiel,
    • chmod o + x / u/sf/cottrell/bin/cgi1.rxx chmod u + x / u/sf/cottrell/bin/cgi1.rxx
    Holen Sie sich Ihren
  • Webmaster , um eine Regel für den Web-Server-Regeln-Datei auf einem Web-Server hinzufügen, um das Skript auszuführen. Für weitere Informationen über den Server-Regeln in W3C-Datei können Sie an Konfigurationsdatei W3C httpd und einfaches Beispiel Reflexion von einigen der Aussagen in der rules-Datei verwendet. Webmaster möchte sicherstellen, dass die Sicherheitsaspekte von Ihr Skript haben, bevor Sie das Skript in der rules-Datei behoben.

  • Print:
  • Buch HTML-und CGI Unleashed gibt es eine Menge an nützlichen Informationen zum Schreiben von CGI-Skripten in C, Perl und REXX.
  • Buch eine Einführung in CGI / Perl Steve Brenner und Edwin Aoki ist eine nützliche Einführung in das Schreiben von Perl-CGI-Skripte.
  • Writing World-Wide Web CGI-Skript in REXX in das Frühjahr vorgestellt Exchange-1996 technische Konferenz, 7. März 1996, Anaheim, Kalifornien.
  • NetRexx Sprache Seite bietet Informationen über das Pilotprojekt von Mike Koulisho (Autor REXX), um eine Schnittstelle Rexx, Java zu erstellen.
  • auch in der Telefonkonferenz zu stimmen comp.infosystems.www.authoring.cgi umfasst eine Diskussion gemeinsamer Gateway Interface (CGI) Skript, da sie auf Web-Seiten beziehen. Mögliche Themen sind die Diskussion, wie man mit den Ergebnissen der Form, wie Sie Bilder für den Sommer zu schaffen, und wie sie zusammen andere interaktive Web-Angeboten beschäftigen.
  • World Wide Web (häufig gestellte Fragen mit Antworten) Antworten viele, viele Fragen über das World Wide Web ein Ganzes.
  • Wenn Sie mit Perl, und Sie haben eine allgemeine Frage Perl, das ist nicht wirklich CGI-spezifische Frage, lesen Sie Perl Fragen und Antworten .
  • Wenn Sie Skripte für Windows NT schreiben, sehen Sie Somarsoft - Windows NT-Sicherheit

    Die meisten der Texte auf den Common Gateway Interface Formulare und Dokumente aus dem NCSA abgeleitet. Praktische Informationen und der Text wurde von World-Wide Web erhalten: Wie Server arbeiten, , Mark Handley und Jon Kroukroft in Connexions veröffentlicht, Februar 1995.