Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Fehler beim https post für ein Formular (Car-Net)

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
2 Beiträge 1 Kommentatoren 628 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Sneak-L8
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      Sneak-L8
      schrieb am zuletzt editiert von
      #2

      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 Antwort Letzte Antwort
      0
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      644

      Online

      32.4k

      Benutzer

      81.6k

      Themen

      1.3m

      Beiträge
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
      ioBroker Community 2014-2025
      logo
      • Anmelden

      • Du hast noch kein Konto? Registrieren

      • Anmelden oder registrieren, um zu suchen
      • Erster Beitrag
        Letzter Beitrag
      0
      • Home
      • Aktuell
      • Tags
      • Ungelesen 0
      • Kategorien
      • Unreplied
      • Beliebt
      • GitHub
      • Docu
      • Hilfe