Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:efi-2023:http [2024/02/06 09:06] – [Parsing HTML] Ivo Blöchliger | lehrkraefte:blc:informatik:efi-2023:http [2024/02/19 08:00] (current) – [JavaScript Debugging] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== HTTP-Protokoll ====== | ||
| + | Grundbegriffe: | ||
| + | * **Client** (normalerweise ein Browser) | ||
| + | * **Server** (normalerweise ein Webserver einer Webseite) | ||
| + | * **URL** | ||
| + | * **Request** (vom Client ausgelöst), | ||
| + | * **Header** (Meta-Informationen zum Request oder zur Response) | ||
| + | * **Content** (Eigentlicher Inhalt des Requests (kann leer sein) oder der Response) | ||
| + | * **Statuscodes** [[https:// | ||
| + | * **Cookies** sind Key/ | ||
| + | ==== Beispiel 1 ==== | ||
| + | * Besuchen Sie die «sehr einfache Webseite» https:// | ||
| + | * Öffnen Sie die Entwicklertools (F12) | ||
| + | * Öffnen Sie den Tab «Network» und studieren Sie dort die Headers (auch raw!) | ||
| + | |||
| + | ==== Beispiel 2 ==== | ||
| + | * Im gleichen Tab, mit den Entwicklertools offen, besuchen Sie https:// | ||
| + | * Studieren Sie die Request- und Response-Headers, | ||
| + | * Loggen Sie sich **mit falschem Passwort** ein (z.B. XXXXXXXXXXX, | ||
| + | * Studieren Sie dann den Request, insbesondere den Inhalt. | ||
| + | |||
| + | ===== Curl ===== | ||
| + | Curl ist ein extrem mächtiges Kommandozeilentool, | ||
| + | |||
| + | Firefox und Chrome erlauben es, einen Request direkt als curl-Kommandozeile zu kopieren und ihn so zu reproduzieren. | ||
| + | |||
| + | Damit das mit Nesa funktioniert, | ||
| + | <code bash> | ||
| + | curl -L -b nesa-cookies.txt -c nesa-cookies.txt .... | ||
| + | </ | ||
| + | Damit werden Redirects verfolgt (-L) und die cookies aus einer Datei gesendet (-b) und gespeichert (-c). | ||
| + | |||
| + | |||
| + | ===== Parsing HTML ===== | ||
| + | Wir könnten mit regular Expressions dahinter, das ist aber mühsam und unstabil. | ||
| + | |||
| + | Wir verwenden deshalb eine Bibliothek, die HTML parsen kann und womit der entstehende Baum mit XPath durchsucht werden kann. | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | ==== Workflow ==== | ||
| + | Um sich nicht die ganze Zeit in NESA neu anzumelden, speichern Sie jeweils die aktuelle Seite in Datei und laden Sie diese direkt ins Programm. Um eine Seite weiterzukommen, | ||
| + | |||
| + | |||
| + | ====== JavaScript Debugging ====== | ||
| + | Im folgenden werden die verwendeten Techniken vorgestellt, | ||
| + | |||
| + | Start: Auf der Raumplanseite, | ||
| + | * Feststellung, | ||
| + | * Das ist ein Hinweis darauf, dass die Daten dynamisch via JavaScript geladen werden. | ||
| + | * In den Entwicklertools können die Netzwerkzugriffe protokolliert werden. Dort ist die obige Feststellung überprüfbar. | ||
| + | * Der interessante Zugriff ist jener auf scheduler_processor.php, | ||
| + | * [[https:// | ||
| + | * Der Inhalt ist tatsächlich XML (könnte auch für JSON verwendet werden). Genau das was wir brauchen. | ||
| + | * **Hinweis**: | ||
| + | * Nächstes Problem: Wo wird die URL erzeugt? | ||
| + | * Breakpoint vor dem Zugriff setzen, Stacktrace analysieren (d.h. die Kette der aufrufenden Funktionen). | ||
| + | * Die interessante Funktion ist hier '' | ||
| + | * In Zeile 3014 ist auch die korrekte URL kodiert, wobei einige Parameter gewählt werden müssen. | ||
| + | |||
| + | Damit hat man alles Nötige, um die XML-Daten via curl zu laden. Man könnte jetzt noch reiner Neugierde schauen, ob man den Code findet, der den Stundenplan darstellt. | ||
| + | |||
| + | * Z.B. Zeile 1873 hat auch sonst noch spannende Infos (Zimmer und Lehrerliste). | ||