Ankündigung

Einklappen
Keine Ankündigung bisher.

HTTP Request in einem LBS benötigt Cookies

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    HTTP Request in einem LBS benötigt Cookies

    Ich hätte eine Frage zu dem HTTP Request LBS von jonofe.

    Ich habe eine BWT AQUA Wasserentärtungsanlage im Einsatz (wie viele andere auch hier), das Teil betreibt lokal einen Webserver, dem man so einiges an Information rauskitzeln kann. Das ist aber m.E. etwas tricky, und BWT hält sich hierzu extrem bedeckt. Aber es funktioniert im "Handbetrieb" ohne Probleme. Und ich würde es gerne in einen LBS giessen.

    Die Enthärteranlage hat eine Login Page, die zwingend durchlaufen werden muss, weil diese eben einen Cookie absetzt, den dann alle weiteren späteren Abfragen serverseitig brauchen.
    Diese Login Seite: http://<IP der BWT>/users/login braucht einen Code, den man aber auch mit übergeben kann: '_method=POST&STLoginPWField='hier_steht_der Code'&function=save'. Als header soll: 'application/x-www-form-urlencoded' mit übergeben werden, wenn man das ganze als POST losschickt....

    Jetzt kommt es: der Server platziert jetzt einen Cookie. Und wie fängt man den jetzt genau auf? Geht das in Curl irgendwie?

    Da ich mich mit HTTP(s) etc. nicht wirklich tief auskenne, bin ich auf den HTTP Request LBS gestossen. Der müsste das doch können, oder?
    Sobald man das mit dem Login und dem Cookie geschafft hat, sind die weiteren Abfragen ziemlich trivial, man bekommt JSON's zurück, denen man die gewünschten Infomationen extrahieren kann. Aber eben diesen Abfragen muss der Cookie wieder mitgegeben werden.

    Den ganzen Einlogvorgang auf der BWT hat das Forumsmitglied bazzman in PERL für seine Zwecke geschrieben und veröffentlicht:
    https://github.com/paolobazzi/LoxBer...html/index.cgi
    Der interessante Teil bzgl. Einloggen ist in Zeile 124 bis 146. Das Daten Auslesen des JSON Strings steht in Zeile 190 bis 210

    Kann mir bitte jemand wegen der Cookie Geschichte auf die Sprünge helfen wie man das in einem EDOMI LBS umsetzt? Das wäre echt super!

    lieben Dank und Grüße
    Christian

    #2
    Vielleicht so:

    PHP-Code:
    $postdata = array('STLoginPWField'=>'hier_steht_der Code','function'=>'save');

    $url 'deine Website';
    $curl curl_init($url);
    curl_setopt($curlCURLOPT_URL$url);
    curl_setopt($curlCURLOPT_CUSTOMREQUEST'POST');
    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);

    $headers = array(
    "application:x-www-form-urlencoded"
    );
    curl_setopt($curlCURLOPT_HTTPHEADER$headers);
    //for debug only!
    curl_setopt($curlCURLOPT_SSL_VERIFYHOSTfalse);
    curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
    curl_setopt($curlCURLOPT_HEADERtrue );
    curl_setopt($curlCURLOPT_POSTFIELDS$postdata);
    $result curl_exec($curl);
    preg_match_all('/^Set-Cookie:\s*([^;]*)/mi'$result$matches);
    $cookies = array();
    foreach(
    $matches[1] as $item) {
    parse_str($item$cookie);
    $cookies array_merge($cookies$cookie);
    }
    var_dump($cookies); 
    Zuletzt geändert von vento66; 07.01.2022, 22:38.

    Kommentar


      #3
      Ich hatte es in einer ersten Version auch in PHP geschrieben und dann auf Perl umgestellt, hab aber glaubs die Snippets in PHP nicht mehr rumliegen.
      Erschwerend zum Cookie kommt leider dazu, dass die BWT ein lokales, altes und abgelaufenes SSL Zertifikat nutzt, für welches man daher die Validierung ausschalten muss. Ausserdem sendet der erste Request einen Redirect auf eine andere URL zurück, für welchem man CURL sagen muss, er soll den Request an die redirect URL wiederholen.

      BTW: das lokale API scheint nur bei Anlagen bis ca. 2020 vorhanden zu sein, danach hat BWT wohl auf eine VNC-basierte Clientlösung umgestellt und die JSON REST Endpoints stehen so nicht mehr im LAN zur Verfügung. Ich bin daher gerade dran, meine Implementierung zu erweitern so dass man entweder das undokumentierte lokale API oder alternativ das offizielle (aber leider in Punkto Datenverfügbarkeit stark reduzierte) BWT Cloud API nutzen kann.

      Grüsse
      Paolo

      Kommentar


        #4
        Ich schaue mir gerade mal den HTTP-Request LBS an bzgl. Erweiterung um Cookie Handling. Das stand ohnehin noch auf meiner TODO Liste. Stay tuned!

        Kommentar


          #5
          Hallo Paolo, Micha und Andre,
          lieben dank für ure Unterstützung. Dieser BWT LBS spukt schon lange in meinem Kopf. Na vielleicht wird es ja jetzt was zusammen. Ich habe eine Perla Hybrid zu Hause, jetzt genau 1 Jahr alt. Und die hat noch die lokale API mit dem JSON REST auf https Basis. Ja, das stimmt auch bei mir, die Jungs von BWT benutzen ein abgelaufenes Zertifikat, damit muss ich immer meinen Virenwächter überzeugen dass das o.k. ist, der befürchtet einen Man in the Middle ... Aber das sollte einem LBS mit abgeschalteter Zertifikatsprüfung ja eigentlich wurscht sein.
          Ich bastel hier auch mal weiter... mal sehen was dabei raus kommt
          liebe Grüße
          Christian

          Kommentar


            #6
            Habe gerade ein Update des HTTP-Request LBS hochgeladen (v0.5).
            Dieser unterstützt nun auch das Empfangen und Senden von Cookies.

            Kommentar


              #7
              Hey, super... werde mal sofort die Tage es ausprobieren, ob ich das Ding noch "knacke". Besten Dank, und Spende geht raus für den LBS... Ich werde mir mal den ganzen Kommunikationsaufbau mit dem Enthärter im Wireshark noch einmal ansehen, wie Paolo sagt, gibt es da ja offensichtlich auch noch einen Redirekt auf den man reagieren muss...

              Kommentar


                #8
                Zitat von ChrisAllgaeu Beitrag anzeigen
                gibt es da ja offensichtlich auch noch einen Redirekt auf den man reagieren muss
                Falls das ein normaler Redirect (HTTP Code 3XX) ist, dann sollte der LBS dem mit einer 1 an E6 auch folgen.

                Kommentar

                Lädt...
                X