Announcement

Collapse
No announcement yet.

CGI Scripte selbst schreiben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CGI Scripte selbst schreiben

    Hallo Leute,<br>
    weiß jemand wie (oder womit) man <b>cgi-scripte</b> schreiben kann? ich weiß zwar wie man daten an ein cgi-script sendet, aber mir fehlt natürlich noch ein script das meine daten richtig verarbeitet. klingt logisch oder? <br><br>
    MfG [CSts]PublicEnemy

  • #2
    Moin,

    meistens werden CGI-Scripte in Perl geschrieben, oder
    auch in einfacher Unix Shell-Script Sprache (also wie
    'ne Batch-Datei - nur unter Unix/Linux...)

    Laza

    Comment


    • #3
      Hi!
      Ich schreibe meine CGIs in C++! (iss einfach schöner)

      Du erhälst vom HTML-Domument einen Environment-Eintrag der QUERY_INPUT oder so heißt.
      Da stehen die Infos vom HTML-Dokument drin!

      Du schickst vom Programm die HTTP-Header (Content-Type) gefolgt von einer Leerzeile
      und hintendran schiebst Du einfach das neue HTML-Dokument raus, was die bearbeiteten Infos enthält!

      Zu kompakt beschrieben? Nähreres gerne per m@il. Kann Dir auch nen Quelltext-Auszug schicken.
      [email protected]

      Comment


      • #4
        Der erste Teil der Frage ist schnell beantwortet. Sie können CGI-Scripte mit fast jeder Programmiersprache erstellen, denn CGI ist nur eine Schnittstelle und überläßt dem Entwickler die Auswahl der Sprache.

        Besonders populär ist in diesem Zusammenhang Perl - und mittlerweile Python. Aber auch die Sprache C hat ihre Meriten. Trotzdem muss gesagt werden, dass die Programmierung mit C/C++ im Vergleich zu den beiden anderen Sprachen sehr aufwendig ist.

        Warum nun Perl beziehungsweise Python? Beide Sprachen sind einfach zu erlernen, verfügen über ausgezeichnete Möglichkeiten zur Textmanipulation und bieten Standard-Module zum CGI-Handling. Somit braucht man sich nicht erst Zusatzmodule im Netz zusammenzusuchen.

        Jetzt zum zweiten Teil der Frage. Ein CGI-Script ist allgemein gesagt ein Programm, welches auf einem Webserver läuft. Dieses Script kann durch Client-Requests angesprochen werden. In der Regel füllt ein Anwender im Web ein Formular aus; anschließend wird der Formular-Inhalt (die ausgefüllten Felder) durch Klicken auf den Submit-Button an das Script übergeben.

        Das Script erhält diese Daten über den Standard-Input-Stream bzw. das Server-Environment (die Umgebungsvariablen des Webservers), verarbeitet dieselben und generiert eine Anwort, die es zurück an den Server schickt. Dieser wiederum schickt das Resultat zuguterletzt an den Client.

        Was sind Umgebungsvariablen? Nichts weiter als simple Key/Value-Paare, welche wichtige Informationen für den CGI-Programmierer bereitstellen. Ein Beispiel soll das Gesagte verdeutlichen. Die Umgebungsvariable <i>HTTP_USER_AGENT</i> enthält bespielsweise einen String mit der Bezeichnung des Client-Browsers.
        <PRE>
        HTTP_USER_AGENT=Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.5) Gecko/20011012
        </PRE>
        Gehen wir in medias res. Eine Beispiel soll den typischen Ablauf der CGI-Entwicklung demonstrieren. Das CGI-Script ist in Python aufgesetzt. Im Prinzip würde ein Perl-Script ähnlich aussehen. Zuerst muss aber noch ein HTML-Formular erstellt werden. Für den Fall, dass Sie sich mit HTML nicht gut auskennen, sollten Sie das bewährte Online-Tutorial <i>selfHTML</i> von Stefan Münz nutzen [1].
        <PRE>
        &lt;form method="POST" action="http://localhost/cgi-bin/cgi_sample.py"&gt;
        &lt;table cellpadding="3" cellspacing="1"&gt;
        &lt;tr&gt;&lt;td&gt;&lt;input type="text" name="User" size="20"&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;tr&gt;&lt;td&gt;&lt;input type="submit" value="Senden"&gt;&lt;/td&gt;&lt;/tr&gt;
        &lt;/table&gt;
        &lt;/form&gt;
        </PRE>
        Folgendes ist zu beachten: Passen Sie den Pfad zum CGI-Script (das <i>action</i>-Attribut im öffnenden <i>FORM</i>-Tag) an Ihre Umgebung an; wobei meistens <i>localhost</i> funktioniert. Nun zum Python-Script.
        <PRE>
        #!/usr/local/bin/python

        import cgi

        formData = cgi.FieldStorage()
        userName = formData['User'].value

        htmlTemplate = """Content-type: text/html

        &lt;html&gt;
        &lt;head&gt;&lt;title&gt;%(title)s&lt;/title&gt;&lt;/head&gt;
        &lt;body&gt;
        %(body)s
        &lt;/body&gt;
        &lt;/html&gt;
        """

        print htmlTemplate % { 'title': 'Hallo!', 'body': 'Ihr Name ist <b>%s</b>.' % cgi.escape(userName) }
        </PRE>

        Achtung: Das Python-Programm muss sich im <i>cgi-bin</i> Verzeichnis des Webservers befinden und es muss ausführbar sein! Achten Sie auf die gesetzten Rechte (755 ist richtig). Verfügt das Script über andere Rechte, ändern Sie das mit dem folgendem Befehl auf der Shell:
        <PRE>
        chmod 755 cgi_sample.py
        </PRE>
        Bevor wir schlußendlich die HTML-Seite im Browser aufrufen und die Daten an das Script übergeben, gehen wir das Beispiel Schritt für Schritt durch. Zuerst sieht man den Pfad zum Interpreter (gegebenenfalls anzupassen). Danach wird mittels <i>import</i>-Anweisung das <i>cgi</i>-Modul importiert; es gehört übrigens zur Python Standard-Bibliothek, weshalb es immer verfügbar ist.

        Und hier zeigt sich eine der Stärken Pythons (bei Perl ist es genauso), denn das <i>cgi</i>-Modul kümmert sich um die Dekodierung der Formular-Daten. Man erhält Key/Value-Paare; also den Namen des Eingabefeldes sowie dessen Inhalt.
        <PRE>
        formData = cgi.FieldStorage()
        user = formData['User'].value
        </PRE>
        In der nächsten Zeile sieht man ein Mini-Template (die Variable <i>htmlTemplate</i>) mit Platzhaltern der Form <i>%(Variable)s</i>.

        Das ist praktisch und sorgt für eine dynamische Ausgabe der empfangenen Daten. Mit dieser Methode lassen sich schnell Standard-Botschaften generieren. Bei Perl erzielt man den gleichen Effekt mit den sogenannten <i>Here</i>-Dokumenten.

        Zum Schluß erfolgt der Template-Aufruf. Hierbei werden die Platzhalter durch passende Werte ersetzt, schließlich muss eine vernünftige Antwort gesendet werden.

        Die <i>escape</i>-Funktion des <i>cgi</i>-Moduls sorgt für eine saubere Formatierung der Daten. Entsprechende Sonderzeichen (wie <i>&</i>, <i><</i>, <i>></i> usw.) werden in HTML-Entities umgewandelt.

        Apropos Interpreter-Pfad. Bei der CGI-Entwicklung mit Python sollte aus Sicherheitsgründen nur der direkte Pfad angegeben werden. Vermeiden Sie den folgenden Aufruf: <i>#!/usr/bin/env python</i>. Viel Erfolg.

        Thomas Kaufmann

        Links:

        [1] http://www.teamone.d

        Comment

        Working...
        X