CGI in Python

Was ist CGI?

Das Common Gateway Interface (CGI) ist eine Schnittstelle von Webservern, über die Datenaustausch mit externen Anwendungen möglich ist. Die Webseiten müssen nicht vollständig auf den Server liegen, sie werden von Programmen dynamisch erzeugt. Die Programme liegen dazu in einem Extra-Verzeichnis des Webservers (z.B. cgi-bin). Früher wurde für CGI-Scripte meist Perl oder C verwendet. Python wird auch in CGI-Scripten, meist innerhalb von Webframeworks, wie Django oder Flask verwendet.

CGI und Python

Auch mit Python lassen sich CGI-Scripte erzeugen. Dafür muss eine ausführbare Python-Datei erzeugt werden, die HTML-Quelltext erzeugt. Unter Windows 10 und 11 lässt sich eine Python-Datei einfach durch Doppelklick ausführen, unter anderen Betriebssystemen ist dazu eine sogenannte Shebang erforderlich, die das nötige Programm aufruft. Außerdem muss die Datei noch ausführbar gemacht werden.

Das folgende CGI-Script gibt mit der print-Anweisung eine einfache Webseite. als mehrzeilige Zeichenkette aus:

#!/usr/bin/env python3 print(""" <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <title>Python-CGI-Programmierung</title> </head> <body> <h1>Hallo Welt, Python CGI!</h1> </body> </html> """)

Das Script muss nun in das cgi-bin Verzeichnis eines Webservers kopiert werden und kann über den Webbrowser aufgerufen werden. Wir wollen dazu den http.server von Python verwenden.

CGI-Script mit dem http.server von Python aufrufen

Zunächst erzeugen wir ein Verzeichnis cgi-bin und kopieren das Script hinein. In unserem Fall wurde das Verzeichnis cgi-bin direkt auf dem Laufwerk N: erzeugt.

Anschließend öffnen wir die Powershell und wechseln ins übergeordnete Verzeichnis von cgi-bin, also in unseren Fall direkt ins Laufwerk N:.

Danach starten wir den Webserver mit python -m http.server --cgi 8888, dabei startet python -m http.server den Server, --cgi macht den Server CGI-fähig und 8888 gibt den Port an, auf dem der Server läuft.

Jetzt können wir unser Script im Webbrowser mit http://localhost:8888/cgi-bin/script01.py aufrufen. Dabei ist http://localhost:8888 der lokale Webserver auf dem Port 8888, /cgi-bin/ das Verzeichnis, in dem das Script liegt und script01.py der Name des Scripts.