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. Entwicklung
  4. Alternative für "request" Paket?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    848

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Alternative für "request" Paket?

Geplant Angeheftet Gesperrt Verschoben Entwicklung
developerdevelopmentadapter entwicklungnodejsnpm
26 Beiträge 7 Kommentatoren 4.0k Aufrufe 7 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.
  • X xawa

    Hallo AlCalzone, vielen Dank für deine Antwort. Was wären wir Änfänger ohne euch Profis.
    webLogin funktioniert prima, allerdings bekomme ich dann einen Authentifizierungsfehler in der Funktion getstoveValues(), wenn ich das json von der Statusseite (welche ja nicht die gleiche Seite ist, bei der ich mich anmelde) abrufen will. Irgendwie scheint die Speicherung vom cookie (withCredentials: true) nicht zu funktionieren.

    Mein Ablaufplan ist folgender und mit request (anstatt axios) funktioniert der Ablauf auch super:

    1.) ich rufe in der onReady() vom Adapter mein webLogin() auf (webLogin und Log funktioniert jetzt prima)
    2.) wenn weblogin nicht in catch läuft, soll getstoveValues() aufgerufen werden und die Daten vom json holen. Und da bekomme ich im Log dann: "getstoveValues: Request failed with status code 401" zurück (meine Meldung eben aus der catch - e.message)

     async onReady() {
        await this.webLogin();
     }
    
    async webLogin() {
    	try {
    		const response = await axios.post(API_SERVER + '/web/login', { email, password }, { withCredentials: true });
    		// in response steht jetzt die Antwort
    		// wenn du sie außerhalb der Funktion nutzen willst:
    		// return response; // oder einen Teil davon
    		this.log.info('webLogin OK')
    		
    		//getstoveValues aufrufen, wenn webLogin OK
    		await this.getstoveValues();
    	} catch (e) {
    		// fehler behandeln/loggen
    		this.log.error('webLogin' + e.message);
    	}
    }
    
    async getstoveValues() {
    	try {
    		const response2 = axios.get(API_SERVER + '/api/client/12345678/status', { withCredentials: true })
    		// in response steht jetzt die Antwort
    		// wenn du sie außerhalb der Funktion nutzen willst:
    		// return response; // oder einen Teil davon
    		this.log.info(JSON.stringify((await response2).data));
    	} catch (e) {
    		// fehler behandeln/loggen
    		this.log.error('getstoveValues: ' + e.message);
    	}
    }
    

    Viele Grüße, Andi

    arteckA Offline
    arteckA Offline
    arteck
    Developer Most Active
    schrieb am zuletzt editiert von arteck
    #21

    @xawa

    const response = await axios.post(API_SERVER + '/web/login', { email, password }, { withCredentials: true });
    

    du musst schon angeben welche parameter was sind

    let res = await axios.post(urlVomServer, { data: `ArrayNum=1&SeriesBatteryNum=1`});
    

    bei mir sind es ArraNum und SeriesBatteryNum

    kast du geschaut was im Header gesendet wird bei login ?

    zigbee hab ich, zwave auch, nuc's genauso und HA auch

    X 1 Antwort Letzte Antwort
    0
    • arteckA arteck

      @xawa

      const response = await axios.post(API_SERVER + '/web/login', { email, password }, { withCredentials: true });
      

      du musst schon angeben welche parameter was sind

      let res = await axios.post(urlVomServer, { data: `ArrayNum=1&SeriesBatteryNum=1`});
      

      bei mir sind es ArraNum und SeriesBatteryNum

      kast du geschaut was im Header gesendet wird bei login ?

      X Offline
      X Offline
      xawa
      schrieb am zuletzt editiert von
      #22

      @arteck ich glaub, da liegt ein Missverständnis.
      Zur Abfolge:
      1.) Ich melde mich mit axios.post auf folgender Seite an, was auch prima funktioniert:
      https://www.rika-firenet.com/web/login
      2.) Danach möchte ich mit axios.get das jason abfragen, das auf folgender Seite liegt:
      https://www.rika-firenet.com/api/client/12345678/status (12345678 ist meine OfenID, natürlich abgeändert)
      Und genau dieser Zugriff scheitert dann an einem Authentifizierungsfehler, obwohl der vorher erfolgreiche Zugriff ja mit einem cookie zwischengespeichert werden müsste (withCredentials: true)

      1 Antwort Letzte Antwort
      0
      • AlCalzoneA AlCalzone

        @xawa Ehrlich gesagt weiß ich es nicht. Habe bisher nicht mit HTTP-Authentifizierung gearbeitet. Was man so im Internet findet, scheint mit deinem Ansatz übereinzustimmen...

        X Offline
        X Offline
        xawa
        schrieb am zuletzt editiert von
        #23

        @AlCalzone Hab trotzdem Vielen Dank

        1 Antwort Letzte Antwort
        0
        • X Offline
          X Offline
          xawa
          schrieb am zuletzt editiert von
          #24

          Vielleicht sollte ich ein eigenes Thema dazu öffnen, da es hier ja grundlegend nur um die Alternativen vom Paket "request" geht?
          Bin doch sicher nicht der einzige, der sich per axios.post an einer Login-Seite anmeldet und per axios.get auf der API-Seite der gleichen domain ein json holen möchte.
          Wie bereits erwähnt funktioniert es mit "request" super, da mit "const request = require('request').defaults({jar: true});" die Anmeldung für alle folgenden requests gespeichert wird, allerdings rät man ja allgemein zu axios zu wechseln.

          AlCalzoneA 1 Antwort Letzte Antwort
          0
          • X xawa

            Vielleicht sollte ich ein eigenes Thema dazu öffnen, da es hier ja grundlegend nur um die Alternativen vom Paket "request" geht?
            Bin doch sicher nicht der einzige, der sich per axios.post an einer Login-Seite anmeldet und per axios.get auf der API-Seite der gleichen domain ein json holen möchte.
            Wie bereits erwähnt funktioniert es mit "request" super, da mit "const request = require('request').defaults({jar: true});" die Anmeldung für alle folgenden requests gespeichert wird, allerdings rät man ja allgemein zu axios zu wechseln.

            AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #25

            @xawa Ggf. liegt es daran, dass die Beispiele für Axios im Browser gelten, der von Haus aus Cookie-Support hat.
            In Node.js musst du den nachrüsten:
            https://github.com/3846masa/axios-cookiejar-support#usage

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            X 1 Antwort Letzte Antwort
            0
            • AlCalzoneA AlCalzone

              @xawa Ggf. liegt es daran, dass die Beispiele für Axios im Browser gelten, der von Haus aus Cookie-Support hat.
              In Node.js musst du den nachrüsten:
              https://github.com/3846masa/axios-cookiejar-support#usage

              X Offline
              X Offline
              xawa
              schrieb am zuletzt editiert von
              #26

              @AlCalzone was soll ich sagen:
              Vielen, Vielen Dank für deine Mühe (mein Weihnachtsgeschenk)!!!
              Genau das hat mein Problem gelöst. Anbei noch der code, vielleicht erspart es anderen genau die 2 Tage, die es mich gekostet hat.

              Zuerst mal installieren: (später für adapter natürlich in dependencies nicht vergessen)

              npm i axios tough-cookie axios-cookiejar-support
              

              in der main.js ganz oben mal alles einbinden:

              const axios = require('axios').default;
              const axiosCookieJarSupport = require('axios-cookiejar-support').default;
              const tough = require('tough-cookie');
              
              axiosCookieJarSupport(axios);
              const cookieJar = new tough.CookieJar();
              

              In der onReady() aufrufen:

              async onReady() {
                 await this.webLogin();
              }
              
              async webLogin() {
              	try {
                                 //Anmelden
              		const response = await axios.post(API_SERVER + '/web/login', { email, password }, { jar: cookieJar, withCredentials: true });
              		// in response steht jetzt die Antwort
              		// wenn du sie außerhalb der Funktion nutzen willst:
              		// return response; // oder einen Teil davon
              		this.log.info('webLogin OK')
              		
              		//getstoveValues aufrufen, wenn webLogin OK
              		await this.getstoveValues();
              	} catch (e) {
              		// fehler behandeln/loggen
              		this.log.error('webLogin: ' + e.message);
              	}
              }
              
              async getstoveValues() {
              	try {
                                 //json von API-Seite holen
              		const response2 = await axios.get(API_SERVER + '/api/client/12345678/status', { jar: cookieJar, withCredentials: true })
              		// in response steht jetzt die Antwort
              		// wenn du sie außerhalb der Funktion nutzen willst:
              		// return response; // oder einen Teil davon
              		this.log.info(JSON.stringify(response2.data));
              	} catch (e) {
              		// fehler behandeln/loggen
              		this.log.error('getstoveValues: ' + e.message);
              	}
              }
              

              Schöne Weihnachten, und nochmal vielen Dank.

              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

              791

              Online

              32.6k

              Benutzer

              82.1k

              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