Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [SOLVED] require request ersetzen durch httpPost in JS

    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

    [SOLVED] require request ersetzen durch httpPost in JS

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      MCU @Blackmike last edited by

      @blackmike Doku -> https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httppost

      httpPost(
          'http://jsonplaceholder.typicode.com/posts',
          {
              title: 'foo',
              body: 'bar',
              userId: 1
          },
          {
              timeout: 2000,
              basicAuth: {
                  user: 'admin',
                  password: 'dg2LdALNznHFNo'
              },
              headers: {
                  'Cookie': 'PHPSESSID=298zf09hf012fh2; csrftoken=u32t4o3tb3gg43; _gat=1'
              }
          },
          (error, response) => {
              if (!error) {
                  console.log(response.statusCode);
                  console.log(response.data);
                  console.log(response.headers);
              } else {
                  console.error(error);
              }
          }
      );
      
      Blackmike 1 Reply Last reply Reply Quote 1
      • Blackmike
        Blackmike @MCU last edited by

        @mcu thnx für die Doku. Ich hatte die nur für httpGet gefunden. Erste versuche sehen gut aus. Hab mir beim probieren aber irgendwas kaputtgemacht im spielesystem. Ich guck heute Abend weiter und werde berichten.

        @Homoran
        Die API erwartet bei dem skizzierten Aufruf ein http post. Get geht da nicht. Mit request funktionieren die Scripte ja mit "POST" auf dem Produktivsystem. Ich will nur auf dem spielesystem sucessiv die Scripte von request auf entweder httpget bzw httppost umbauen und testen und nach Validierung ins produktivsystem übernehmen.

        Thnx für eure Hilfestellung

        Black

        Homoran 1 Reply Last reply Reply Quote 1
        • Homoran
          Homoran Global Moderator Administrators @Blackmike last edited by Homoran

          @blackmike hab inzwischen auch versucht das Konstrukt nachzuvollziehen und bei Mozilla developers und stackoverflow passende Passagen gefunden, aber mangels js Kenntnissen nicht zuordnen können was mit dem body bei httpPost passiert, der ja tatsächlich gesendet werden kann/muss.

          Die Doku hatte ich leider auch nicht gefunden.

          Blackmike 1 Reply Last reply Reply Quote 0
          • Blackmike
            Blackmike @Homoran last edited by Blackmike

            Dank dem Doku Link von MCU, ohne den das nicht geklappt hätte, habe ich nun den Frame, um request Posts in das neue httpPost umzusetzen.

            Funktional war die Benutzung des Body sowie eigene Header.
            Hat also erfolgreich geklappt

            Das adäquate Konstrukt schaut dann so aus:

            function device_realqueryV2 (SerNr) {
               const body= '{"sn": "'+SerNr+'", "variables": []}'
               const headers={headers: GetAuth (apikey,path_real_query,lang)}    
               httpPost (domain+path_real_query,body,headers,function (err,response) {
                 var jdev= response.data  
                 log (response.data)
               })    
            }
            

            Thnx für die Hilfestellung

            Black

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

              @blackmike sagte in require (request) ersetzen durch "httpPost" in javascript:

              const body= '{"sn": "'+SerNr+'", "variables": []}'

              Du kannst auch direkt ein Objekt übergeben und musst nicht so komisch JSON-Strings zusammenbauen.

              function device_realqueryV2 (SerNr) {
                httpPost(
                  domain + path_real_query,
                  {
                    sn: SerNr,
                    variables: []
                  },
                  {
                    headers: GetAuth(apikey,path_real_query,lang)
                  },
                  (err, response) => {
                    const data = response.data;
                    log (data);
                  }
                );
              }
              
              1 Reply Last reply Reply Quote 0
              • Blackmike
                Blackmike last edited by

                Generell gute Idee...

                Aber der body MUSS ein string sein. Als json objekt bekommen ich ein Fail bei der Abfrage.

                Black

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

                  @blackmike sagte in [SOLVED] require request ersetzen durch httpPost in JS:

                  MUSS ein string sein. Als json objekt

                  JSON ist auch einfach nur ein String.

                  Muss als Objekt aber auch gehen - dann macht die http-Funktion die JSON-Konvertierung für Dich.

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

                    @haus-automatisierung
                    👍

                    Ging auch... Fehler von mir, es reichte nicht aus, nur die Aussen delimiter wegzunehmen... mit korrektem Object klappte die Abfrage

                    Thnx, Blck

                    D 1 Reply Last reply Reply Quote 0
                    • D
                      DerGraf123 @Blackmike last edited by

                      Hallo Zusammen,

                      ich versuche auch gerade von "request" wegzukommen.
                      Leider scheitere ich bei httpPost um den TNES von Tasker zu erreichen.
                      Javascript 8.6.0

                      Funktionierender Request:

                      request.post({url:'http://192.168.178.51:8765',form:{ sayit: "Sprachausgabe" }},function(error, response, body) { 
                          if (error) log(error, 'error');  
                      });
                      

                      Nicht funktionierender httpPost:

                      httpPost('http://192.168.178.51:8765', { sayit: "Sprachausgabe" }, { timeout: 5000 }, (error, response) => {
                          if (!error) {
                              console.log(response.statusCode);
                              console.log(response.data);
                              console.log(response.headers);
                          } else {
                              console.error(error);
                          }
                      });
                      

                      Als Fehler kommt ein Timeout:

                      
                      javascript.0
                      2024-06-23 11:39:32.376	error	script.js.common.Sayit: timeout of 5000ms exceeded
                      
                      javascript.0
                      2024-06-23 11:39:32.375	error	script.js.common.Sayit httpPost(url=http://192.168.178.51:8765, error=timeout of 5000ms exceeded)
                      

                      Timeout habe ich wie ersichtlich schon testweise hochgedreht.
                      Liegt es evtl. am Port?

                      Für Tipps danke ich schon einmal im Voraus.

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @DerGraf123 last edited by paul53

                        @DerGraf123
                        Bei request gab es noch das Attribut "form". Versuche mal

                        httpPost('http://192.168.178.51:8765', {form: {sayit: "Sprachausgabe"}}, { timeout: 5000 }, (error, response) => {
                        

                        oder?

                        httpPost('http://192.168.178.51:8765', {form: {sayit: "Sprachausgabe"},  timeout: 5000 }, (error, response) => {
                        
                        haus-automatisierung D 2 Replies Last reply Reply Quote 0
                        • haus-automatisierung
                          haus-automatisierung Developer Most Active @paul53 last edited by haus-automatisierung

                          @paul53 Erst kommen die Post-Parameter, dann die Optionen für den Request. War also oben schon richtig.

                          httpPost('http://192.168.178.51:8765', { sayit: 'Sprachausgabe' }, { timeout: 5000 }, (error, response) => {
                          

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

                          Im Verbose-Mode sieht man dann auch sehr gut, wie der Request zusammengebaut wird.

                          1 Reply Last reply Reply Quote 0
                          • D
                            DerGraf123 @paul53 last edited by DerGraf123

                            @paul53 Mit deiner Idee und dem Attribute "form" bekomme ich zwar keinen Timeout mehr, eine Sprachausgabe erfolgt aber nicht. Timeout Variable habe ich wieder rausgenommen, da 2000ms mehr als ausreichend sein sollte.

                            httpPost('http://192.168.178.51:8765', { form: {sayit: 'Sprachausgabe' }}, (error, response) => {
                                if (!error) {
                                    console.log(response.statusCode);
                                    console.log(response.data);
                                    console.log(response.headers);
                                } else {
                                    console.error(error);
                                }
                            });
                            
                            javascript.0	12:09:24.356	info	script.js.common.Sayit: 200
                            javascript.0	12:09:24.356	info	script.js.common.Sayit: <html><head><head><body><h1>Hello, World</h1></body>Header<br/>content-length : 29 remote-addr : 192.168.178.252 http-client-ip : 192.168.178.252 host : 192.168.178.51:8765 content-type : application/json connection : keep-alive accept-encoding : gzip, compress, deflate, br accept : application/json, text/plain, */* user-agent : Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0 <br/>----<br/>method = POST<br/>uri = /<br/>Params<br/>NanoHttpd.QUERY_STRING : null<br/></html>
                            javascript.0	12:09:24.356	info	script.js.common.Sayit: Object [AxiosHeaders] { 'content-type': 'text/html', date: 'Sun, 23 Jun 2024 10:09:24 GMT', connection: 'keep-alive', 'content-length': '496' }
                            
                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            920
                            Online

                            31.8k
                            Users

                            80.0k
                            Topics

                            1.3m
                            Posts

                            6
                            16
                            1124
                            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