Bernhard: XMLHttpRequest, der Scraping Bots draußen hält

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 )

  • Somit lassen sich die Inhalte auch nicht von jedermann scrapen.

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

  1. 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

    --
    sumpsi - posui - obstruxi
    1. 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 ;-)

  2. Wie funktioniert die Authentifizierung des Clients (daher durch den Browser) [...], damit er Daten per Klick nachladen darf?

    Antwort.

    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 ;-)

  3. 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

    --
    sumpsi - posui - obstruxi
    1. 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

      1. Hallo Robert B.,

        ich hab nochmal geguckt.

        Nein, ist im Prowser verpoten

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Moin Rolf,

          ich hab nochmal geguckt.

          Nein, ist im Prowser verpoten

          vielen Dank für den Hinweis. Ich habe die Wiki-Seite entsprechend korrigiert.

          Viele Grüße
          Robert