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. Http request in javascript

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Http request in javascript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 5 Kommentatoren 8.1k Aufrufe 4 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.
  • T Offline
    T Offline
    tp1de
    schrieb am zuletzt editiert von
    #1

    Hallo ich versuche mich gerade an meinem ersten Javascript Programm.

    Bisher habe ich alles in Node-Red realisiert, so langsam wird der Code aber unübersichtlich und ich möchte mich nun nach 2 Jahren Node-Red in Javascript versuchen.

    Ich scheitere aber am http Aufruf.

    Ich möchte dabei die url, die headers und die method GET/POST vorgeben.

    Kann mir jemand helfen wie die Syntax lautet?

    Grüße Thomas

    P.S. Mit meinen 61 Jahren tue ich mich noch mit der JS-Syntax etwas schwer :( , aber ich bin sicher, dass das für viele hier im Forum trivial ist ….

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Das NPM-Modul https://www.npmjs.com/package/request ist bereits im Javascript-Adapter enthalten.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      metaxaM 1 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        tp1de
        schrieb am zuletzt editiert von Jey Cee
        #3

        Danke. Jetzt müsste ich nur verstehen wie ich den Rückgabewert erhalte.

        Verstehe die Callback Funktion nicht so richtig.

        var request = require('request');
        
        var options = { url: ' xxxxxx', method: 'GET', headers: { 'User-Agent': 'request' }};
        
        request(options, callback);
        
        ******** Wie kann ich die info-JSON hier weiter verwenden ? *********
        
        function callback(error, response, body)
        
        {
        
        if (!error && response.statusCode == 200)
        
        {
        
        var info = JSON.parse(body);
        
        }}
        
        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @tom57:

          Verstehe die Callback Funktion nicht so richtig. `
          Die Callback-Funktion wird ausgeführt, wenn das Ergebnis vorliegt.
          @tom57:

          Wie kann ich die info-JSON hier weiter verwenden ? `
          Wenn ein JSON-String als Ergebnis geliefert wird, ist info nach JSON.parse() ein Objekt, auf dessen Eigenschaften man zugreifen kann, so wie statusCode eine Eigenschaft des Objektes response ist.

          Bitte Javascript-Code in code tags posten !

          var request = require('request');
          var options = {url: 'xxxxxx', method: 'GET', headers: { 'User-Agent': 'request' }};
          request(options, function(error, response, body) {
             if (!error && response.statusCode == 200) {
                var info = JSON.parse(body);  // info ist ein Objekt
                var x = info.xy;  // xy ist eine Eigenschaft des Objektes info
             }
          });
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            tp1de
            schrieb am zuletzt editiert von
            #5

            Soweit klar. Aber so wie ich das sehe, kann das Hauptprogramm welches den request aufruft, den Rückgabewert nicht weiterverarbeiten.

            D.h. nur die aufgerufene callback-Funktion kann die http Get Rückgabewerte weiterverarbeiten.

            Oder kann ich die gelesenen Werte an das Hauptprogramm welches den request aufruft weitergeben? (Falls Ja wie?)

            Ansonsten funktioniert der Aufruf …. Vielen Dank

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @tom57:

              nur die aufgerufene callback-Funktion kann die http Get Rückgabewerte weiterverarbeiten. `
              Richtig. Du wirst Dich sicherlich daran gewöhnen.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                tp1de
                schrieb am zuletzt editiert von
                #7

                Ich möchte noch einmal versuchen Hilfe zu bekommen.

                Die http-Abfage mit request(options, callback) funktioniert soweit. Vielleicht kann mir jemand helfen, wie ich Verbindungsfehler econnreset verarbeiten kann. D.h. ich möchte dann die http-Abfrage nach einer bestimmten Wartezeit solange wiederholen, bis die Abfrage erfolgreich war.

                Aktuell frage ich ca. 10 Werte einzeln per http-Request alle 30 Sekunden ab. Ca. 7-8 sind erfolgreich, 2-3 aber nicht.

                Ich habe versucht in der callback-Funktion den request nach einer Sekunde zu wiederholen, das funktioniert aber so nicht so richtig:

                function callback(error, response, body)
                { 
                   if (!error && response.statusCode == 200) 
                   {
                        Daten(body);   // Weiterverabeitung
                   }
                   else
                   {
                     console.warn('*** http Fehler:');
                     setTimeout(request(options, callback),1000);
                     request(options, callback);
                   }
                }
                

                Kann mir jemand helfen, wie ich das richtig mache?

                Viele Grüße

                Thomas

                1 Antwort Letzte Antwort
                0
                • blauholstenB Offline
                  blauholstenB Offline
                  blauholsten
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @tom57:

                  Ich möchte noch einmal versuchen Hilfe zu bekommen.

                  Die http-Abfage mit request(options, callback) funktioniert soweit. Vielleicht kann mir jemand helfen, wie ich Verbindungsfehler econnreset verarbeiten kann. D.h. ich möchte dann die http-Abfrage nach einer bestimmten Wartezeit solange wiederholen, bis die Abfrage erfolgreich war.

                  Aktuell frage ich ca. 10 Werte einzeln per http-Request alle 30 Sekunden ab. Ca. 7-8 sind erfolgreich, 2-3 aber nicht.

                  Ich habe versucht in der callback-Funktion den request nach einer Sekunde zu wiederholen, das funktioniert aber so nicht so richtig:

                  function callback(error, response, body)
                  { 
                     if (!error && response.statusCode == 200) 
                     {
                          Daten(body);   // Weiterverabeitung
                     }
                     else
                     {
                       console.warn('*** http Fehler:');
                       setTimeout(request(options, callback),1000);
                       request(options, callback);
                     }
                  }
                  

                  Kann mir jemand helfen, wie ich das richtig mache?

                  Viele Grüße

                  Thomas `

                  SSorry, aber du erklärst das recht bescheiden.

                  Aber wenn ich das richtig verstehe, ist das besser:

                  function callback(error, response, body)
                  { 
                     if (!error && response.statusCode == 200) 
                     {
                          Daten(body);   // Weiterverabeitung
                     }
                     else
                     {
                       console.warn('*** http Fehler:');
                       setTimeout(request(options, callback),1000);
                     }
                  }
                  

                  Entwickler vom: - Viessman Adapter
                  - Alarm Adapter

                  1 Antwort Letzte Antwort
                  0
                  • T Offline
                    T Offline
                    tp1de
                    schrieb am zuletzt editiert von
                    #9

                    Ja Du hast recht. Genauso habe ich das auch versucht.

                    Das Problem ist aber, dass beim http-Fehler dann jede Sekunde der request rekursiv neu aufgerufen wird und sich so ggfs. eine Queue mit requests aufbaut. Eine Sekunde scheint zu kurz.

                    Ich frage aktuell 14 Werte einzeln ab. 60% funktionieren und bei 40% muss ich erneut abfragen … z.T. bis zu 8 Mal bis ich den Wert erhalte !

                    Nach einigen Stunden / Tagen Laufzeit des Scipts laufen die "wartenden" requests bis zu 30 Minuten nach, wenn ich das js-Programm beende !

                    Das ist so nicht so schön und die wiederholten requests erzeugen noch mehr Verbindungsabbrüche (econnreset).

                    Ich suche noch nach einer besseren Lösung . Gibt es eine Möglichkeit den http-request synchron auszuführen, d.h. mit dem Programmablauf zu "warten" bis es einen status.code bzw. body als return gibt?

                    1 Antwort Letzte Antwort
                    0
                    • blauholstenB Offline
                      blauholstenB Offline
                      blauholsten
                      Developer
                      schrieb am zuletzt editiert von
                      #10

                      @tom57:

                      ).

                      Ich suche noch nach einer besseren Lösung . Gibt es eine Möglichkeit den http-request synchron auszuführen, d.h. mit dem Programmablauf zu "warten" bis es einen status.code bzw. body als return gibt? `

                      Kannst du Mal den kompletten Code posten?

                      Entwickler vom: - Viessman Adapter
                      - Alarm Adapter

                      1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        Das NPM-Modul https://www.npmjs.com/package/request ist bereits im Javascript-Adapter enthalten.

                        metaxaM Offline
                        metaxaM Offline
                        metaxa
                        schrieb am zuletzt editiert von
                        #11

                        @paul53 sagte in Http request in javascript:

                        Das NPM-Modul https://www.npmjs.com/package/request ist bereits im Javascript-Adapter enthalten.

                        Ist das wirklich so? Mit blockly gibt es keine Fehlermeldungen, kaum importiere ich das blockly in ein JS, erhalte ich folgende Meldung:44227f57-2448-4ac8-be09-01504dcadf1e-grafik.png
                        Ich beisse mir jetzt schon seit Tagen mit meinen Nichtkenntnissen in JS die Zähne aus.

                        schedule("*/10 * * * *", function () {
                        var result;
                            try {
                                require("request")('https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.138062&longitude=16.235994&fuelType=DIE&includeClosed=true', function (error, response, result) {
                                  console.log(result);
                                setState("a_andreas.0.sys_variablen.Objekt_JSON", result, true);
                                }).on("error", function (e) {console.error(e);});
                            } catch (e) { console.error(e); }
                          console.debug("request: " + 'https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.138062&longitude=16.235994&fuelType=DIE&includeClosed=true');
                        });
                        

                        Kann mir bitte jemand weiterwelfen?
                        LG, mxa

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • metaxaM metaxa

                          @paul53 sagte in Http request in javascript:

                          Das NPM-Modul https://www.npmjs.com/package/request ist bereits im Javascript-Adapter enthalten.

                          Ist das wirklich so? Mit blockly gibt es keine Fehlermeldungen, kaum importiere ich das blockly in ein JS, erhalte ich folgende Meldung:44227f57-2448-4ac8-be09-01504dcadf1e-grafik.png
                          Ich beisse mir jetzt schon seit Tagen mit meinen Nichtkenntnissen in JS die Zähne aus.

                          schedule("*/10 * * * *", function () {
                          var result;
                              try {
                                  require("request")('https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.138062&longitude=16.235994&fuelType=DIE&includeClosed=true', function (error, response, result) {
                                    console.log(result);
                                  setState("a_andreas.0.sys_variablen.Objekt_JSON", result, true);
                                  }).on("error", function (e) {console.error(e);});
                              } catch (e) { console.error(e); }
                            console.debug("request: " + 'https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.138062&longitude=16.235994&fuelType=DIE&includeClosed=true');
                          });
                          

                          Kann mir bitte jemand weiterwelfen?
                          LG, mxa

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von
                          #12

                          @metaxa sagte:

                          erhalte ich folgende Meldung

                          Die Meldung sollte ignoriert werden: Es ist keine "echte" Fehlermeldung;

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Antwort Letzte Antwort
                          0
                          • AlCalzoneA Offline
                            AlCalzoneA Offline
                            AlCalzone
                            Developer
                            schrieb am zuletzt editiert von
                            #13

                            Du kannst die Zeile sogar weglassen - die Variable request existiert bereits im Skript-Kontext.

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

                            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

                            938

                            Online

                            32.5k

                            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