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.pyIm 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 """