Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. Alternative für "request" Paket?

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    300

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

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

Alternative für "request" Paket?

Scheduled Pinned Locked Moved Entwicklung
developerdevelopmentadapter entwicklungnodejsnpm
26 Posts 7 Posters 4.2k Views 7 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • X Offline
    X Offline
    xawa
    wrote on last edited by
    #17

    Hallo Leute, zumindest bin ich bei meinem Adapter schon mal etwas weiter indem ich den Weblogin und das Holen der Values getrennt hab und zumindest keine axios Fehler bezügl. fehlerhafte Authentisierung im Log bekomme.
    Allerdings funktionieren 2 Sachen nicht:

    1.) this.log.info funktioniert in diesen try - catch Blöcken von axios nicht, sondern nur außerhalb.
    Folgendes erscheint im Log des Adapters, wenn ich mit this.log.info('') etwas reinschreiben möchte:
    (1338) TypeError: Cannot read property 'log' of undefined at /opt/iobroker/node_modules/iobroker.andi-axios/main.js:107:11 at processTicksAndRejections (internal/process/task_queues.js:97:5)
    (1338) unhandled promise rejection: Cannot read property 'log' of undefined
    Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().

    Bei Matthias Kleine und seinem Luftdaten-Adapter funktioniert this.log... ja auch und ich hab hier keine besondere Definition gesehen (https://github.com/klein0r/ioBroker.luftdaten/blob/master/main.js)

    2.) wie komme ich zu meinen Values im json und wie kann ich die im Log ausgeben, damit ich zumindest mal sehe, welche Daten daherkommen?

    Anbei ein Auszug meiner main.js Weiß hier jemand Rat von euch?

    async onReady() {
    //aufruf von Weblogin 	
    await this.webLogin();
    //und danach die Werte holen
    this.getstoveValues();
    }
    
    webLogin() {
    	axios.post(API_SERVER + '/web/login', { email, password }, { withCredentials: true })
    	.then(function(response) {			
    		this.log.info('local request done'); //wird nicht ins log geschrieben
    	}).catch(function(error) {
    	  this.log.info('Error on Authentication'); //wird nicht ins log geschrieben
    	});
    }
    
    getstoveValues() {
       axios.get(API_SERVER + '/api/client/12345678/status', { withCredentials: true, responseType: 'json' })
       .then(function(response) {
    	const content = response.data;
    	this.log.info(JSON.stringify(content)); //wird nicht ins log geschrieben
      }).catch(function(error) {
    	this.log.error(Error); //wird nicht ins log geschrieben
      });
      this.log.info("test"); //das WIRD ins log geschrieben
    }
    
    AlCalzoneA 1 Reply Last reply
    0
    • X xawa

      Hallo Leute, zumindest bin ich bei meinem Adapter schon mal etwas weiter indem ich den Weblogin und das Holen der Values getrennt hab und zumindest keine axios Fehler bezügl. fehlerhafte Authentisierung im Log bekomme.
      Allerdings funktionieren 2 Sachen nicht:

      1.) this.log.info funktioniert in diesen try - catch Blöcken von axios nicht, sondern nur außerhalb.
      Folgendes erscheint im Log des Adapters, wenn ich mit this.log.info('') etwas reinschreiben möchte:
      (1338) TypeError: Cannot read property 'log' of undefined at /opt/iobroker/node_modules/iobroker.andi-axios/main.js:107:11 at processTicksAndRejections (internal/process/task_queues.js:97:5)
      (1338) unhandled promise rejection: Cannot read property 'log' of undefined
      Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().

      Bei Matthias Kleine und seinem Luftdaten-Adapter funktioniert this.log... ja auch und ich hab hier keine besondere Definition gesehen (https://github.com/klein0r/ioBroker.luftdaten/blob/master/main.js)

      2.) wie komme ich zu meinen Values im json und wie kann ich die im Log ausgeben, damit ich zumindest mal sehe, welche Daten daherkommen?

      Anbei ein Auszug meiner main.js Weiß hier jemand Rat von euch?

      async onReady() {
      //aufruf von Weblogin 	
      await this.webLogin();
      //und danach die Werte holen
      this.getstoveValues();
      }
      
      webLogin() {
      	axios.post(API_SERVER + '/web/login', { email, password }, { withCredentials: true })
      	.then(function(response) {			
      		this.log.info('local request done'); //wird nicht ins log geschrieben
      	}).catch(function(error) {
      	  this.log.info('Error on Authentication'); //wird nicht ins log geschrieben
      	});
      }
      
      getstoveValues() {
         axios.get(API_SERVER + '/api/client/12345678/status', { withCredentials: true, responseType: 'json' })
         .then(function(response) {
      	const content = response.data;
      	this.log.info(JSON.stringify(content)); //wird nicht ins log geschrieben
        }).catch(function(error) {
      	this.log.error(Error); //wird nicht ins log geschrieben
        });
        this.log.info("test"); //das WIRD ins log geschrieben
      }
      
      AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      wrote on last edited by
      #18

      @xawa sagte in Alternative für "request" Paket?:

      1.) this.log.info funktioniert in diesen try - catch Blöcken von axios nicht, sondern nur außerhalb.

      Das liegt an function () { ... }, hierbei wird der Wert von this nicht erhalten. Um dieses Problem zu beheben, kannst du die durch Pfeilfunktionen ersetzen.

      wie komme ich zu meinen Values im json und wie kann ich die im Log ausgeben, damit ich zumindest mal sehe, welche Daten daherkommen?

      Ich würde async/await nutzen, das umgeht auch dein Problem 1:

      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
          } catch (e) {
              // fehler behandeln/loggen
          }
      }
      

      Die Funktion webLogin musst du dann auch mit await aufrufen.

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

      X 1 Reply Last reply
      0
      • AlCalzoneA AlCalzone

        @xawa sagte in Alternative für "request" Paket?:

        1.) this.log.info funktioniert in diesen try - catch Blöcken von axios nicht, sondern nur außerhalb.

        Das liegt an function () { ... }, hierbei wird der Wert von this nicht erhalten. Um dieses Problem zu beheben, kannst du die durch Pfeilfunktionen ersetzen.

        wie komme ich zu meinen Values im json und wie kann ich die im Log ausgeben, damit ich zumindest mal sehe, welche Daten daherkommen?

        Ich würde async/await nutzen, das umgeht auch dein Problem 1:

        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
            } catch (e) {
                // fehler behandeln/loggen
            }
        }
        

        Die Funktion webLogin musst du dann auch mit await aufrufen.

        X Offline
        X Offline
        xawa
        wrote on last edited by
        #19

        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

        AlCalzoneA arteckA 2 Replies Last reply
        0
        • 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

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          wrote on last edited by
          #20

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

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

          X 1 Reply Last reply
          0
          • 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
            wrote on last edited by 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 Reply Last reply
            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
              wrote on last edited by
              #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 Reply Last reply
              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
                wrote on last edited by
                #23

                @AlCalzone Hab trotzdem Vielen Dank

                1 Reply Last reply
                0
                • X Offline
                  X Offline
                  xawa
                  wrote on last edited by
                  #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 Reply Last reply
                  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
                    wrote on last edited by
                    #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 Reply Last reply
                    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
                      wrote on last edited by
                      #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 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      614

                      Online

                      32.7k

                      Users

                      82.5k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe