Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Fehler beim https post für ein Formular (Car-Net)

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Fehler beim https post für ein Formular (Car-Net)

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Sneak-L8 last edited by

      Hallo zusamen,

      bin gerade dabei das Python-Skript von https://github.com/wez3/volkswagen-carn … net_web.py als JavaScript in ioBroker zu implementieren. Ich bin auch schon durch eine https-Requests durch und scheitere nun am Übergeben der Formulardaten bei einem POST-Request.

      Skript:

      ! ````
      // Skript zum Abragen des Status im Car-Net von Volkswagen
      // V1.0.0 - 03.06.2018 - initiale Version
      ! var request = require('request');
      ! var base = "https://www.volkswagen-car-net.com";
      var authbase = "https://security.volkswagen.com";
      var csrf = "";
      var refUrl = "";
      var viewState = "";
      var email = "user-email";
      var password = "passwort";
      var errCount = 0; // Anzahl zulässige Fehler bis Mail verschickt wird
      ! function carNet_error(meldung, typ) {
      if (typ === undefined)
      typ = "";
      ! var sendMail = true;
      log('CarNet: ' + meldung, 'error');
      if (typ == "main") {
      errCount ++;
      if (errCount < 3)
      sendMail = false;
      }
      if (sendMail)
      sendTo("email", {
      subject: "FEHLER bei CarNet-Verarbeitung",
      text: meldung
      });
      }
      ! function getPartOfSite(content, startTag, endTag, startOffset) {
      if (startOffset === undefined)
      startOffset = 0;
      var pos = content.indexOf(startTag, startOffset);
      if (pos >= 0) {
      pos += startTag.length;
      var pos2 = content.indexOf(endTag, pos +1);
      if (pos2 >= 0) {
      return {
      found: true,
      value: content.substring(pos, pos2).trim(),
      start: pos,
      end: pos2,
      cutter: pos2 + endTag.length
      };
      }
      }
      return null;
      }
      ! function carNet_login() {
      csrf = "";
      refUrl = "";
      viewState = "";
      request(base + '/portal/en_GB/web/guest/home', process_login1);
      }
      ! function get_csrf(body) {
      var data = getPartOfSite(body, '');
      if (data === null) {
      carNet_error('Kein Token für Login gefunden\n' + body);
      return "";
      }
      return data.value;
      }
      ! function get_loginUrl(body) {
      var data = getPartOfSite(body, 'cn-login-url="', '"');
      if (data === null) {
      carNet_error('Keine Login-URL gefunden\n' + body);
      return "";
      }
      return data.value;
      }
      ! function get_viewState(body) {
      var data = getPartOfSite(body, 'name="javax.faces.ViewState" id="j_id1:javax.faces.ViewState:0" value="', '"');
      if (data === null) {
      carNet_error('Keinen Viewstate für Login gefunden\n' + body);
      return "";
      }
      return data.value.replace(/\x3a/g, ":").replace(/\x2f/g, "/").replace(/\x2e/g, ".");
      }
      ! function get_redirectUrl(body) {
      var data = getPartOfSite(body, '');
      if (data === null) {
      //carNet_error('Keine Redirect-URL nach Login gefunden\n' + body);
      console.log("Mist, nichts gefunden!!!"+body);
      return "";
      }
      return data.value.replace('&', '&');
      }
      ! function get_authheader(url, redir) {
      if (redir === undefined)
      redir = true;
      var options = null;
      if (redir)
      options = {
      url: url,
      headers: {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; D5803 Build/23.5.A.1.291; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36',
      'Referer': base + '/portal',
      'X-CSRF-Token': csrf
      }
      };
      else
      options = {
      url: url,
      followRedirect: function (resp) {
      return false;
      },
      headers: {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; D5803 Build/23.5.A.1.291; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36',
      'Referer': base + '/portal',
      'X-CSRF-Token': csrf
      }
      };
      return options;
      }
      ! function process_login1(err, stat, body) {
      if (err)
      carNet_error('Fehler "' + err + '" beim Abruf der Login-Seite');
      else if(body) {
      var detailsUrl = stat.request.uri.href;
      csrf = get_csrf(body);
      if (csrf === "")
      return;
      console.log("Session = " + csrf);
      request(get_authheader(base + "/portal/web/guest/home/-/csrftokenhandling/get-login-url"), process_login2);
      } else {
      carNet_error("Login1-Seite ist leer (" + stat.statusCode + ")");
      }
      }

      function process_login2(err, stat, body) {
      if (err)
      carNet_error('Fehler "' + err + '" beim Abruf der Login-Seite 2');
      else if(body) {
      var loginUrl = get_loginUrl(body);
      if (loginUrl === "")
      return;
      //console.log('Login-URL: ' + loginUrl);
      request.get(get_authheader(loginUrl, false), process_login3);
      } else {
      carNet_error("Login2-Seite ist leer (" + stat.statusCode + ")");
      }
      }

      function process_login3(err, stat, body) {
      if (err)
      carNet_error('Fehler "' + err + '" beim Abruf der Login-Seite 3');
      else if(stat.statusCode == 302) {
      refUrl = stat.headers.location;
      if (refUrl === "") {
      carNet_error("Keine Location für Redirect gefunden");
      return;
      }
      console.log('refURL: ' + refUrl);
      request.get(get_authheader(refUrl), process_login4);
      } else {
      carNet_error("Login3-Seite ist leer (" + stat.statusCode + ")");
      }
      }

      function process_login4(err, stat, body) {
      if (err)
      carNet_error('Fehler "' + err + '" beim Abruf der Login-Seite 4');
      else if(body) {
      viewState = get_viewState(body);
      if (viewState === "")
      return;
      console.log('ViewState = ' + viewState);
      var formData = {
      'loginForm': 'loginForm',
      'loginForm:email': email,
      'loginForm:password': password,
      'loginForm:j_idt19': '',
      'javax.faces.ViewState': viewState,
      'javax.faces.source': 'loginForm:submit',
      'javax.faces.partial.event': 'click',
      'javax.faces.partial.execute': 'loginForm:submit loginForm',
      'javax.faces.partial.render': 'loginForm',
      'javax.faces.behavior.event': 'action',
      'javax.faces.partial.ajax': 'true'
      };
      var options = {
      url: authbase + '/ap-login/jsf/login.jsf',
      headers: {
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; D5803 Build/23.5.A.1.291; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36',
      'Faces-Request': 'partial/ajax',
      'Referer': refUrl,
      'X-CSRF-Token': ''
      },
      form: formData,
      method: 'POST'
      };
      console.log("URL: " + options.url);
      console.log("ref: " + refUrl);
      request(options, process_login5);
      } else {
      carNet_error("Login4-Seite ist leer (" + stat.statusCode + ")");
      }
      }

      function process_login5(err, stat, body) {
      if (err)
      carNet_error('Fehler "' + err + '" beim Abruf der Login-Seite 5');
      else if (body) {
      console.log('Status = ' + stat.statusCode);
      var redirectUrl = get_redirectUrl(body);
      if (redirectUrl === "")
      return;
      console.log('Wow! ' + redirectUrl);
      //request.get(get_authheader(refUrl), process_login4);
      } else {
      carNet_error("Login5-Seite ist leer (" + stat.statusCode + ")");
      }
      }

      ! function doRequest() {
      carNet_login();
      }
      ! doRequest(); // einmal gleich losstarten

      
      Die Daten, die ich beim Post in process_login4 übergebe entsprechen genau denen die auch im Python-Skript übergeben werden. Leider erhalte ich aber keinen Login wie im Phython-Skript (das funktioniert, hab ich getestet) sondern nur einen Response 500 und dass die Applikation zur Zeit nicht zur Verfügung stehe. Wenn ich die Form-Daten weglasse, kommt es zum selben Fehler. Ich vermute daher, dass diese nicht korrekt übergeben werden. Hab es schon mit request.post versucht, hab die Daten mit stringify als body übergeben, wie hier [https://stackoverflow.com/questions/171 … st-module ](https://stackoverflow.com/questions/17121846/node-js-how-to-send-headers-with-form-data-using-request-module) beschrieben. Leider alles erfolglos.
      
      Hat jemand einen Tipp für mich?
      
      Ich hatte bei mir natürlich gültige Login-Daten im Skript. Aber bei falschen Daten käme auch im Python-Skript eine andere Fehlermeldung. Also müsste man das auch ohne Zugangsdaten testen können.
      
      Viele Grüße
      
      Sneak-L8
      1 Reply Last reply Reply Quote 0
      • S
        Sneak-L8 last edited by

        Aber ich [emoji3]

        Problem war, dass das Python-Skript eine Session benutzt, um z.B. Cookies durchzureichen.

        Wenn man dem Request ein jar: request.jar() mit gibt, dann klappt es…

        Edit: Hier viewtopic.php?f=35&t=15308 ist das Skript.

        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        710
        Online

        31.7k
        Users

        79.9k
        Topics

        1.3m
        Posts

        1
        2
        551
        Loading More Posts
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes
        Reply
        • Reply as topic
        Log in to reply
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
        The ioBroker Community 2014-2023
        logo