Ein HTTP-Client
HTTP-GET-Anfrage
Wenn die URL https://www.inf-schule.de/content/1_information/1_informationsdarstellunginternet/1_vernetztewebseiten/1_einstieg_www/_bailey1.html
im Browser aktiviert wird, wird eine Anfrage an einen Host mit dem Namen www.inf-schule.de
gesandt, die Datei
/content/1_information/1_informationsdarstellunginternet/1_vernetztewebseiten/1_einstieg_www/_bailey1.html
zurückzuliefern.
Ein HTTP-Client sendet hierzu die folgende Anfrage an den HTTP-Server:
GET /content/1_information/1_informationsdarstellunginternet/1_vernetztewebseiten/1_einstieg_www/_bailey1.html HTTP/1.1 Host: www.inf-schule.de
Der HTTP-Server liefert daraufhin die folgende Antwort:
HTTP/1.1 200 OK Date: Sat, 14 Apr 2018 20:46:25 GMT Server: Apache/2.4.10 (Debian) Last-Modified: Thu, 11 Jan 2018 19:23:27 GMT ETag: "3aa-562851514823b" Accept-Ranges: bytes Content-Length: 938 Vary: Accept-Encoding Content-Type: text/html; charset=UTF-8 ... Inhalt von /content/1_information/1_informationsdarstellunginternet/1_vernetztewebseiten/1_einstieg_www/_bailey1.html ...
Durchführung einer HTTP-GET-Anfrage mit einem Client-Socket
Der folgende Python-Dialog zeigt, wie man eine HTTP-GET-Anfrage an einen HTTP-Server mit einem Socket-Objekt erzeugt.
>>> import socket
>>> import ssl
>>> c = socket.socket()
>>> c.connect(('www.inf-schule.de', 443))
>>> c = ssl.create_default_context().wrap_socket(c, server_hostname='www.inf-schule.de')
>>> c.send('GET /content/1_information/1_informationsdarstellunginternet/1_vernetztewebseiten/1_einstieg_www/_bailey1.html HTTP/1.1\r\nHost: www.inf-schule.de\r\n\r\n'.encode())
148
>>> x = c.recv(2048)
>>> print(str(x, 'utf-8'))
HTTP/1.1 200 OK
Date: Sat, 14 Apr 2018 20:46:25 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Thu, 11 Jan 2018 19:23:27 GMT
ETag: "3aa-562851514823b"
Accept-Ranges: bytes
Content-Length: 938
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<link href="styles/style.css" rel="stylesheet" type="text/css"/>
<title>Homepage von Bailey</title>
</head>
<body>
<h1>Hallo, ich heiße Bailey</h1>
<p>
<img alt="Foto von Bailey" src="img/bailey1.jpg"/>
</p>
<p>
Hallo, ich heiße Bailey und lebe in der Nähe von
<a href="http://www.kaiserslautern.de">Kaiserslautern</a>.
Ich bin ein Australian Shepherd, meine Vorfahren haben in
Australien Schafe gehütet.
</p>
<p>
Wenn ich erwachsen bin, will ich Agility-Sport treiben.
Wisst ihr überhaupt, was das ist? Wenn nicht, dann schaut
euch doch mal die Fotos bei
<a href="https://de.wikipedia.org/wiki/Agility">Wikipedia</a>
an. Ihr
>>> b = c.recv(1024)
>>> print(str(b, 'utf-8'))
werdet staunen, was wir Hunde alles können!
</p>
<p>
Ich kann aber auch schon ganz viel. Das könnt ihr auf
der <a href="bailey2.html">nächsten Seite</a> sehen.
</p>
</body>
</html>
>>>
Aufgabe 1
Probiere das selbst mit verschiedenen URLs aus. Beachte, dass gegebenenfalls eine andere Codierung angegeben werden muss.
GUI für eine HTTP-GET-Anfrage
Die Ausführung einer HTTP-GET-Anfrage kann natürlich auch in ein Programm mit grafischer Benutzeroberfläche eingebunden werden.
Aufgabe 2
Teste das Programm socket-client-V4.py.