CGI

Das CGI (Common Gateway Interface) stellt die wohl einfachste Webserver-Schnittstelle für die Webprogrammierung dar. Hier ein einfaches Python CGI-Skript (helloworld.py):

   1 #!/usr/bin/env python
   2 # -*- coding: utf-8 -*-
   3 
   4 print "Content-type: text/html"
   5 print ""
   6 
   7 print "Hello World!"

Python bringt in der Standardinstallation schon Module für die Erstellung eines einfachen Webservers mit. Folgender Programmcode erzeugt einen CGI-Webserver (cgiserver.py), der nach seinem Start unter der URL http://localhost:8080 erreichbar ist.

   1 #!/usr/bin/env python
   2 # -*- coding: utf-8 -*-
   3 
   4 from BaseHTTPServer import HTTPServer
   5 from CGIHTTPServer import CGIHTTPRequestHandler
   6 
   7 class CGIServer(HTTPServer):
   8     def __init__(self, (hostname,port), handler):
   9         HTTPServer.__init__(self, (hostname, port), handler)
  10 
  11 if __name__ == '__main__':
  12     srvaddr = ("", 8080) #Computername, Portnummer
  13     cgisrv = CGIServer(srvaddr,CGIHTTPRequestHandler)
  14     cgisrv.serve_forever()

In dem Verzeichnis, in dem der CGI-Server (cgiserver.py) gestartet wird, muss ein Unterverzeichnis "cgi-bin" angelegt werden. Python-Skripte, die dort abgelegt sind, können durch den CGI-Webserver ausgeführt werden. Das CGI-Skript "helloworld.py" also in "cgi-bin" speichern und durch den Aufruf der URL http://localhost:8080/cgi-bin/helloworld.py im Browser sollte dann das "Hello World!" erscheinen.

Die Verzeichnisstruktur sollte also so aussehen:

C:\cgitest\
    |- cgi-bin\
    |    `- helloworld.py
    |
    `- cgiserver.py

Im Pfad darf kein Leerzeichen und kein Sonderzeichen enthalten sein, sonst kann es sein, dass der CGI-Server die Python-Dateien nicht interpretieren kann. Bei diesem Verhalten gibt es Unterschiede zwischen den einzelnen Python-Versionen. Wenn es mit einer Python-Version mit Leerzeichen funktioniert, dann muss es nicht unbedingt auch mit einer anderen Python-Version funktionieren. Vorsicht: Unter Windows enthält auch der Pfad zum Desktop mehrere Leerzeichen!

Mit diesem CGI-Skript findet man raus, welche Daten an CGI-Programme weitergereicht werden:

   1 #!/usr/bin/env python
   2 # -*- coding: iso-8859-1 -*-
   3 
   4 print "Content-Type: text/html;charset=iso-8859-1"
   5 print
   6 
   7 import cgi
   8 import cgitb; cgitb.enable()
   9 
  10 print """<html>
  11 <head>
  12   <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
  13   <title>CGI-Informationen</title>
  14 </head>
  15 <body>
  16 """
  17 
  18 # Feldwerte
  19 fs = cgi.FieldStorage()
  20 print "<h3>Feldwerte</h3>"
  21 print fs.list
  22 print
  23 
  24 cgi.print_arguments()
  25 cgi.print_directory()
  26 cgi.print_environ()
  27 cgi.print_environ_usage()
  28 
  29 import os
  30 print os.environ.get("HTTP_HOST")
  31 
  32 print """
  33 </body>
  34 </html>
  35 """

Tags: Web

CGI (last edited 2009-06-17 16:14:28 by localhost)