4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
4 in 1 - Medieninformatik - Hochschule RheinMain
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Grundlagen Web<br />
Common Gateway Interface<br />
Grundlagen Web<br />
Common Gateway Interface<br />
CGI-Programm <strong>in</strong> Python<br />
Ausgabe auf Standardausgabe<br />
• Erst Header, dann Content<br />
(HTTP-Protokoll)<br />
• Getrennt durch e<strong>in</strong>e Leerzeile (Extra<br />
newl<strong>in</strong>e Zeile 2)<br />
HTTP-Header<br />
• Content-Type zw<strong>in</strong>gend notwendig,<br />
meist text/html<br />
• Weitere Header-Zeilen möglich,<br />
werden meist von Web-Server ergänzt<br />
HTML-Dokument, Content<br />
• E<strong>in</strong>fach pr<strong>in</strong>t auf Standardausgabe<br />
• Beliebiger Code<br />
Fehler: “Internal Server Error”<br />
• Vielleicht noch was im Log...<br />
hallo.cgi<br />
1 #!/usr/b<strong>in</strong>/python<br />
2 pr<strong>in</strong>t "Content-Type: text/html\n"<br />
3 pr<strong>in</strong>t ""<br />
4 pr<strong>in</strong>t "Hallo"<br />
5 pr<strong>in</strong>t ""<br />
6 pr<strong>in</strong>t "Hallo CGI Python"<br />
7 pr<strong>in</strong>t ""<br />
CGI Beispiel – Details<br />
Anfrage<br />
1 GET<br />
2 /~pbart001/cgi-b<strong>in</strong>/hallo.cgi<br />
3 HTTP/1.1<br />
Umgebungsvariablen<br />
1 SERVER_SOFTWARE=Apache/2.2.14 ....<br />
2 SCRIPT_NAME=/~pbart001/cgi-b<strong>in</strong>/hallo.cgi<br />
3 REQUEST_METHOD=GET<br />
4 SERVER_PROTOCOL=HTTP/1.1<br />
5 HTTP_CONNECTION=Keep-Alive<br />
6 REMOTE_ADDR=172.26.33.61<br />
7 SERVER_PORT=80<br />
8 SERVER_ADDR=195.72.105.32<br />
9 DOCUMENT_ROOT=/var/www/<br />
10 HTTP_HOST=www<br />
11 GATEWAY_INTERFACE=CGI/1.1<br />
12 REMOTE_PORT=53197<br />
Antwort<br />
1 HTTP/1.1 200 OK<br />
2 Date: Mon, 04 Feb 2013 10:21:42 GMT<br />
3 Content-Encod<strong>in</strong>g: gzip<br />
4 Connection: Keep-Alive<br />
5 Content-Length: 82<br />
6 Server: Apache/2.2.14 (Ubuntu) ...<br />
7 Vary: Accept-Encod<strong>in</strong>g<br />
8 Content-Type: text/html<br />
9 Keep-Alive: timeout=15, max=100<br />
10<br />
11 ...<br />
Standardausgabe<br />
1 Content-Type: text/html<br />
2<br />
3 <br />
4 Hallo<br />
5 <br />
6 Hallo CGI Python<br />
7 <br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Web-basierte Anwendungen 24. April 2013 13 / 91<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Web-basierte Anwendungen 24. April 2013 14 / 91<br />
Grundlagen Web<br />
Common Gateway Interface<br />
Grundlagen Web<br />
Common Gateway Interface<br />
Komfortable CGI-Programmierung<br />
Umgebungsvariablen<br />
Python-Bibliothek<br />
• cgi Hilfsrout<strong>in</strong>en<br />
• cgitb (TraceBack), Ansicht<br />
Fehlermeldungen, sehr s<strong>in</strong>nvoll<br />
hallokomf.cgi<br />
Informationen <strong>in</strong> Umgebungsvariablen<br />
• Vom Web-Server, aus Anfrage<br />
• Vom Skript verwertbar<br />
Informationen – Anfrage<br />
• Anfragemethode, Query-Str<strong>in</strong>g, . . .<br />
1 #!/usr/b<strong>in</strong>/python<br />
2 # immer gleich am Anfang<br />
Informationen – Infrastruktur<br />
3 pr<strong>in</strong>t "Content-Type: text/html\n"<br />
4 import cgi, cgitb<br />
5 cgitb.enable()<br />
6<br />
7 # ab hier spezifisch je Skript<br />
8 fehler<br />
9 pr<strong>in</strong>t ""<br />
10 pr<strong>in</strong>t "Hallo"<br />
11 pr<strong>in</strong>t ""<br />
12 pr<strong>in</strong>t "Hallo CGI Python"<br />
13 pr<strong>in</strong>t ""<br />
Fehler <strong>in</strong> Zeile 8 wird erkannt und<br />
entsprechend im Browser ausgegeben.<br />
Sehr hilfreich beim Programmieren.<br />
• Web-Browser, Web-Server, . . .<br />
env.cgi<br />
1 #!/usr/b<strong>in</strong>/python<br />
2 pr<strong>in</strong>t "Content-Type: text/html\n"<br />
3 import cgi, cgitb<br />
4 cgitb.enable()<br />
5 import os<br />
6 for key <strong>in</strong> os.environ:<br />
7 pr<strong>in</strong>t key, "=", os.environ[key]<br />
8 pr<strong>in</strong>t ""<br />
Beispiel ohne HTML-Rahmen. Viele Browser können daraus immer noch<br />
etwas machen. Für Vorlesung ok, da man ansonsten zu viel Boilerplate-Code hat.<br />
Sie generieren immer korrektes HTML.<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Web-basierte Anwendungen 24. April 2013 15 / 91<br />
Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Web-basierte Anwendungen 24. April 2013 16 / 91