Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. HTTP-Post und Headerübergabe

    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

    HTTP-Post und Headerübergabe

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      HackyPaddy last edited by HackyPaddy

      Moin zusammen,

      ich muss bei einem HTTP-Post im Header den Content-Type "application/json" mitgeben.
      Wie stelle ich das bei dem HTTP-Post-Block am besten an?

      Vielen Dank 🙂

      MartinP haus-automatisierung 2 Replies Last reply Reply Quote 0
      • MartinP
        MartinP @HackyPaddy last edited by

        @hackypaddy Ich bin auch nicht der Javascript Checker ...

        Hier ein Beispiel, wie ich es benutze - da müsstest Du wahrscheinlich den "headers:" Abschnitt anpassen und übernehmen ...

            httpPost(docsisURL,
              'xhr=1&sid=' + sid + '&lang=de&page=docInfo&xhrId=all&no_sidrenew=', 
               // { form:    'xhr=1&sid=' + sid + '&lang=de&page=docInfo&xhrId=all&no_sidrenew='}, 
                {
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
            },
                (error, response) => {
        
        
        1 Reply Last reply Reply Quote 0
        • haus-automatisierung
          haus-automatisierung Developer Most Active @HackyPaddy last edited by

          @hackypaddy Beispiele gibt es doch in der Doku:

          https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httppost

          z.B.

          httpPost(
              'http://jsonplaceholder.typicode.com/posts',
              {
                  title: 'foo',
                  body: 'bar',
                  userId: 1
              },
              {
                  timeout: 2000,
                  headers: {
                      'Content-Type': 'application/json'
                  }
              },
              (error, response) => {
                  if (!error) {
                      console.log(response.statusCode);
                      console.log(response.data);
                      console.log(response.headers);
                  } else {
                      console.error(error);
                  }
              }
          );
          
          H 2 Replies Last reply Reply Quote 0
          • H
            HackyPaddy @haus-automatisierung last edited by HackyPaddy

            @haus-automatisierung Das habe ich über eine Funktion gelöst und das läuft auch. Problem ist, dass es mir den StatusCode sowie den Data-Block in das Log schreibt, das bringt mir aber nix.

            Ich muss den Statuscode und die Antwort im Script weiterverarbeiten. Nur, wie komme ich an die Daten bzw. wie kann ich die an den Rückgabewert der Funktion übergeben, sodass ich diesen in Blockly weiterverarbeiten kann?

            So tief bin ich in JavaScript nicht drin...!

            Funktion

            Im Bild ein Beispiel, wie ich das brauche. Beachte unten das return...

            haus-automatisierung 1 Reply Last reply Reply Quote 0
            • H
              HackyPaddy @haus-automatisierung last edited by

              @haus-automatisierung In dem Block (error, response) müsste ich zwei Variablen setzen, die dann auch im Funktionsblock zur Verfügung stehen.

              Überall kann ich ne Variable deklarieren und diese wird dann auch an das Blockly übergeben. Aber innerhalb des Blocks

              (error, response) => {
                      if (!error) {
                          console.log(response.statusCode);
                          console.log(response.data);
                          //console.log(response.headers);
                      } else {
                          console.error(error);
                      }
                  }
              

              werde die Variablen verworfen. Irgendwie komm ich da nicht weiter... 🤕

              MartinP 1 Reply Last reply Reply Quote 0
              • MartinP
                MartinP @HackyPaddy last edited by

                @hackypaddy hmm - könnte am Variablennamen liegen.
                Das, was Du zeigst, enthält gar keine Variable

                H 1 Reply Last reply Reply Quote 0
                • haus-automatisierung
                  haus-automatisierung Developer Most Active @HackyPaddy last edited by

                  @hackypaddy sagte in HTTP-Post und Headerübergabe:

                  Ich muss den Statuscode und die Antwort im Script weiterverarbeiten. Nur, wie komme ich an die Daten bzw. wie kann ich die an den Rückgabewert der Funktion übergeben, sodass ich diesen in Blockly weiterverarbeiten

                  Sorry, ich habe erstmal nur beantwortet, was auch gefragt wurde 🙂

                  In dem Fall musst Du die Async Variante nutzen, welche ein Promise zurückliefert. Gerade nur am Handy, kann später gern ein Beispiel teilen (falls ich es nicht vergesse)

                  H 2 Replies Last reply Reply Quote 0
                  • H
                    HackyPaddy @MartinP last edited by

                    @martinp sagte in HTTP-Post und Headerübergabe:

                    @hackypaddy hmm - könnte am Variablennamen liegen.
                    Das, was Du zeigst, enthält gar keine Variable

                    Ne, das war ja auch nur ein Beispiel 🙂

                    1 Reply Last reply Reply Quote 0
                    • H
                      HackyPaddy @haus-automatisierung last edited by

                      @haus-automatisierung Das wäre ein Träumchen! Ich steh mit beiden Füßen auf dem Schlauch und es kommt nicht ein Tropfen Wasser 😂

                      1 Reply Last reply Reply Quote 0
                      • H
                        HackyPaddy @haus-automatisierung last edited by

                        @haus-automatisierung ich hab mich mal in die async funktion eingelesen und probiert. Aber ich mach mehr kaputt als das es funktioniert... 😠

                        haus-automatisierung 1 Reply Last reply Reply Quote 0
                        • haus-automatisierung
                          haus-automatisierung Developer Most Active @HackyPaddy last edited by

                          @hackypaddy

                          return httpPostAsync(
                              'http://jsonplaceholder.typicode.com/posts',
                              {
                                  title: 'foo',
                                  body: 'bar',
                                  userId: 1
                              },
                              {
                                  timeout: 2000,
                                  headers: {
                                      'Content-Type': 'application/json'
                                  }
                              }
                          );
                          

                          Und dann halt in Blockly wieder auf die Eigenschaften des Response-Objekts zugreifen. Also statusCode und data.

                          H 2 Replies Last reply Reply Quote 0
                          • H
                            HackyPaddy @haus-automatisierung last edited by

                            @haus-automatisierung Du bist die Wucht. Danke. Damit funktioniert es 🙂

                            1 Reply Last reply Reply Quote 0
                            • H
                              HackyPaddy @haus-automatisierung last edited by

                              @haus-automatisierung Ich muss den Thread nochmal aus der Versenkung holen. Die Lösung hat bis zum Update auf den JavaScript-Adapter V. 8.8.3 wunderbar funktioniert.

                              Seit dem Update jedoch stützt Nachts der JavaScript-Adapter ab. Und zwar genau dann, wenn die DSL-Zwangstrennung kommt und das Script die Daten nicht senden kann.

                              Hier ein Auszug aus dem Log:

                              2024-11-05 04:50:30.056 - error: javascript.0 (2428097) script.js.common.ATU.Messdaten_senden: httpPost(XXX, error=timeout of 30000ms exceeded)
                              2024-11-05 04:50:30.059 - error: javascript.0 (2428097) 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().
                              2024-11-05 04:50:30.059 - error: javascript.0 (2428097) unhandled promise rejection: timeout of 30000ms exceeded
                              2024-11-05 04:50:30.060 - error: javascript.0 (2428097) Error: timeout of 30000ms exceeded
                              

                              Hast Du ne Ahnung, was wie wo und warum das passiert? Eigebtlich sollte er beim Timeout von 30 Sek. doch abbrechen und nicht den ganzen Adapter killen.

                              Viele Grüße
                              Patrick

                              haus-automatisierung 1 Reply Last reply Reply Quote 0
                              • haus-automatisierung
                                haus-automatisierung Developer Most Active @HackyPaddy last edited by

                                @hackypaddy sagte in HTTP-Post und Headerübergabe:

                                Die Lösung hat bis zum Update auf den JavaScript-Adapter V. 8.8.3 wunderbar funktioniert.

                                Das liegt garantiert nicht an der Version oder ist erst seit der Version so.

                                @hackypaddy sagte in HTTP-Post und Headerübergabe:

                                Hast Du ne Ahnung, was wie wo und warum das passiert?

                                Ja, weil es kein Try-Catch gibt oder mit .catch() der Fehler abgefangen wird. Steht ja auch in der Meldung. Da müsste man das Script etwas umbauen.

                                H 1 Reply Last reply Reply Quote 0
                                • H
                                  HackyPaddy @haus-automatisierung last edited by

                                  @haus-automatisierung

                                  Bekommt man die .catch-Funktion denn im Blockly irgendwie dargestellt?

                                  haus-automatisierung 1 Reply Last reply Reply Quote 0
                                  • haus-automatisierung
                                    haus-automatisierung Developer Most Active @HackyPaddy last edited by

                                    @hackypaddy Aktuell nicht. Das müsste man direkt in der JS-Funktion lösen und sich überlegen was man dann zurückliefert.

                                    H 1 Reply Last reply Reply Quote 0
                                    • H
                                      HackyPaddy @haus-automatisierung last edited by

                                      @haus-automatisierung

                                      OK. Theoretisch müsste nichts zurück geliefert werden. Am besten wäre ein Eintrag ins Log und dann bricht das Script ab.

                                      Wird eh alle 10 Minuten aufgerufen...

                                      Nur der Adapter sollte nicht mehr abschmieren, das ist mehr als ungünstig 😞

                                      Ich habe ja dein Script von oben genauso eingesetzt. Kann man das einfach auf try und catch umbauen?

                                      z.B. so:

                                      try {
                                      return httpPostAsync(
                                          'http://jsonplaceholder.typicode.com/posts',
                                          {
                                              title: 'foo',
                                              body: 'bar',
                                              userId: 1
                                          },
                                          {
                                              timeout: 2000,
                                              headers: {
                                                  'Content-Type': 'application/json'
                                              }
                                          }
                                      )
                                      }
                                      catch {
                                          console.warn("Test123");
                                      }
                                      
                                      
                                      haus-automatisierung 1 Reply Last reply Reply Quote 0
                                      • haus-automatisierung
                                        haus-automatisierung Developer Most Active @HackyPaddy last edited by

                                        @hackypaddy sagte in HTTP-Post und Headerübergabe:

                                        Kann man das einfach auf try und catch umbauen?

                                        Theoretisch ja, aber dann geben manche Pfade ja keinen Wert zurück. Also könntest Du wieder Fehler bekommen, wenn Du in Blockly dann auf die Attribute zugreifen möchtest (weil ja nichts zurückgegeben wird). Da könnte man dann ein neues Objekt mit Dummy-Werten zurückliefern.

                                        z.B.

                                        try {
                                            return httpPostAsync(
                                                'http://jsonplaceholder.typicode.com/posts',
                                                {
                                                    title: 'foo',
                                                    body: 'bar',
                                                    userId: 1
                                                },
                                                {
                                                    timeout: 2000,
                                                    headers: {
                                                        'Content-Type': 'application/json'
                                                    }
                                                }
                                            );
                                        }
                                        catch (err) {
                                            console.warn(err);
                                        
                                            return {
                                                statusCode: -1,
                                                data: '',
                                                headers: [],
                                            };
                                        }
                                        
                                        H 1 Reply Last reply Reply Quote 0
                                        • H
                                          HackyPaddy @haus-automatisierung last edited by

                                          @haus-automatisierung

                                          Perfekt, so könnte ich über den Statuscode im Blockly weiter machen. Das ne gute Idee!

                                          Sagmal, bietest Du auch einen MasterKurs "JavaScript Advance" an. Wäre mal ne Idee 😁

                                          haus-automatisierung 1 Reply Last reply Reply Quote 0
                                          • haus-automatisierung
                                            haus-automatisierung Developer Most Active @HackyPaddy last edited by

                                            @hackypaddy sagte in HTTP-Post und Headerübergabe:

                                            Sagmal, bietest Du auch einen MasterKurs "JavaScript Advance" an.

                                            Hatte ich mir überlegt, aber wo fängt man da an? All das hier sind ja JavaScript-Grundlagen und haben erstmal nichts mit dem ioBroker zu tun.

                                            Und wenn ich ganz vorne anfange, dann ist es ein extrem weiter Weg der ganzen Grundlagen, bis ich überhaupt mal bei ioBroker-Themen ankomme. Und dann sind wir so weit vom Smart Home Thema weg, dass ich mich erstmal dagegen entschieden habe.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            650
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            25
                                            1241
                                            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