ich versuche mittels der Methode "Get" des TFPHTTPClient den Inhalt von Seiten der deutschen Wikipedia zu laden.
Dabei ergibt sich ein seltsames Verhalten der Methode Get, wobei ich mir nicht sicher bin, ob es ursächlich an der Methode liegt.
Vorab, ein Abruf einzelner Artikel wie z.B.
Code: Alles auswählen
Memo1.Lines.Text := TFPHTTPClient.SimpleGet('https://de.wikipedia.org/wiki/Lazarus_(Entwicklungsumgebung)');
Was aber nicht geht, sind Aufrufe von "dynamischen" Seiten, wie der Startseite oder Kategorieseiten.
Code: Alles auswählen
Memo1.Lines.Text := TFPHTTPClient.SimpleGet('https://de.wikipedia.org/wiki/Wikipedia:Hauptseite');
Gleiches passiert bei
Code: Alles auswählen
Memo1.Lines.Text := TFPHTTPClient.SimpleGet('https://de.wikipedia.org/wiki/Kategorie:Free_Pascal');
Und da wird es dann seltsam, denn die folgende Zeile funktioniert:
Code: Alles auswählen
Memo1.Lines.Text := TFPHTTPClient.SimpleGet('https://de.wikipedia.org/w/index.php?title=Kategorie:Free_Pascal');
https://de.wikipedia.org/w/index.php
über eine Umleitung (Antwort 301) zur Hauptseite der Wikipedia.
Implementiert man nun eine Instanz von TFPHTTPClient und erlaubt die Weiterleitung, so kommt offensichtlich die Antwort mit der Umleitung an und der folgende Aufruf zur umgeleiteten Seite schlägt dann fehl.
Natürlich funktionieren alle verwendeten Links im Browser.
Zunächst dachte ich, dass Wikipedia den unbekannten "Browser" ausschließt, aber ein Eintrag
Code: Alles auswählen
lPHTTPClient.AddHeader('User-Agent', 'Mozilla/5.0');
Ich vermutete auch, dass die Komponente vielleicht den ":" in einen anderen Code konvertiert, weil sie dieses Zeichen als unzulässig in der Pfadangabe der URL ansieht, aber beim Aufruf zu einem lokalen Server, sieht man in dessen log, dass dem nicht so ist.
Kennt jemand ein solches Verhalten oder hat Ideen, was man noch probieren könnte?
Viele Grüße
Ekkehard