31.10.2013 Aufrufe

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!