XMLHttpRequest, der Scraping Bots draußen hält
Bernhard
- https
- php
- webserver
Hallo,
Würde einem/r nicht-Bot BenutzerIn gerne das Einsehen von Daten ermöglichen, und Bots gleichzeitig "draußen" halten.
Die European Energy Exchange Platform scheint mir da als valides Vorbild - ruft man z.B. die Seite https://www.eex.com/de/marktdaten/strom/futures auf, so kann man sich problemlos durch die Informationen klicken (Jahr, Quartal, Statistiken, etc.) - diese werden via XMLHttpRequest nachgeladen.
...das lässt sich in den Dev Tools unter Network/Netzwerkanalyse auch recht gut nachvollziehen, dort poppen Status 200 Responses mit jedem Klick auf - geht man diesen Querys nach, stößt man auf eine Seite bzw. einen Bereich, die via Login Form geschützt und NICHT frei zugänglich ist (z.B. https://queryeex.gvsi.com/ExactSymbolSearch/json?symbol=%2FE.ATBQ )
Meine Frage dazu ist sehr konkret (bitte kein "Du kannst das ja ganz anders machen"):
Wie funktioniert die Authentifizierung des Clients (daher durch den Browser) auf https://www.eex.com/de/marktdaten/strom/futures, damit er Daten per Klick nachladen darf?
(Dies scheint nämlich mit oder ohne Cookies zu funktionieren...oder?)
...mich würde nur die prinzipielle Funktionsweise interessieren, den Rest ergoogle ich mir schon selbst irgendwie.
(Bitte auch kein Rants in Richtung "OMG - SEO Compliance!" - irrelevant)
Danke für eure Hilfe, Bernhard
Hallo Bernhard,
Dazu müsste man im Detail vergleichen, wie sich die Request Header von Browser und XMLHttpRequest unterscheiden.
Vermutlich kommt es auf etwas an, das im XMLHttpRequest nicht dabei ist.
Rolf
Wie funktioniert die Authentifizierung des Clients (daher durch den Browser) auf https://www.eex.com/de/marktdaten/strom/futures, damit er Daten per Klick nachladen darf?
Dazu müsste man im Detail vergleichen, wie sich die Request Header von Browser und XMLHttpRequest unterscheiden.
Vermutlich kommt es auf etwas an, das im XMLHttpRequest nicht dabei ist.
Oder auch zu viel oder falsch... wie auch immer...
Wenn ich beispielsweise den "Request für die Woche":
"https://queryeex.gvsi.com/ExactSymbolSearch/json?symbol=%2FE.ATB_WEEK" einfach
in einem neuem Tab öffne, macht es bei mir auch Meep. Z.B. im Chrome kannst Du Dir im Netzwerkpanel beim dem Klick aber noch mehr holen: beispielsweise einen Kommandozeilenaufruf via "CURL", denn Du dann in einer Shell absetzen kannst. Sämtliche Request-Daten werden dann 1:1 wie vom Browser-Klick initiert zum Server geschickt.
Gerade ausprobiert. Ergebnis: dieselbe Response wie via Klick im Browser.
Security by obscurity. Oder "diebstahl.gif" 2.0 ;-)
Wie funktioniert die Authentifizierung des Clients (daher durch den Browser) [...], damit er Daten per Klick nachladen darf?
Würde einem/r nicht-Bot BenutzerIn gerne das Einsehen von Daten ermöglichen, und Bots gleichzeitig "draußen" halten.
Es gibt Wege, aber die passen alle nicht zu Deinem Setup "öffentlich klickbar". Du kannst es (wie im Beispiel) erschweren, aber das war es auch dann auch schon.
Mehr als brutale Captchas / SMS / FON / Post-Ident fällt mir da nicht ein. Dann solltest Du allerdings auch mit Besucherrückgang rechnen ;-)
Hallo Bernhard,
habe jetzt mal geschaut. Wenn ich in den Chrome Developer Tools sage, er soll den Request wiederholen, dann klappt das.
Kopiere ich die URL und starte sie in einem eigenen Tab, kommt der Login.
Unterschied: Der XHR hat die zusätzlichen Header Origin und Referer. Ob man diese Header aus dem Browser heraus per XHR faken kann, weiß ich nicht.
Ein Nichtbrowser-Client wie Curl kann es bestimmt.
Rolf
Moin Rolf,
Unterschied: Der XHR hat die zusätzlichen Header Origin und Referer. Ob man diese Header aus dem Browser heraus per XHR faken kann, weiß ich nicht.
meinst du via setRequestHeader oder durch Manipulation der Request-Header in den Entwicklertools? Beides ist möglich.
Viele Grüße
Robert
Hallo Robert B.,
ich hab nochmal geguckt.
Rolf
Moin Rolf,
ich hab nochmal geguckt.
vielen Dank für den Hinweis. Ich habe die Wiki-Seite entsprechend korrigiert.
Viele Grüße
Robert