Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Frage] CURL Befehl ausführen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Frage] CURL Befehl ausführen

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

      Hi,

      Wie kann ich einen CURL Befehl z.b. als Skript absenden?

      Befehl als solches sieht ungefaehr so aus:

      curl 'https://192.168.1.11/dbbroker' -H 'Authorization: Basic YWRtaW46OHAABBCCYQG8=' -H 'Origin: https://192.168.1.11' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.8,de;q=0.6' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Accept: */*' -H 'Referer: https://192.168.1.11/admin/' -H 'X-Requested-With: XMLHttpRequest' -H 'Cookie: sn=3C83390100D72; ys-BrowseDataViewMode=s%3Aicons' -H 'Connection: keep-alive' --data ' <xs:nml xmlns:xs="http://www.netgear.com/protocol/transaction/NMLSchema-0.9" xmlns="urn:netgear:nas:readynasd" src="dpv_1490124698000" dst="nas"><xs:transaction id="njl_id_12134"> <xs:custom id="njl_id_12133" name="Halt" resource-id="Shutdown" resource-type="System"> <shutdown halt="true" fsck="false"></shutdown> </xs:custom> </xs:transaction></xs:nml> ' --compressed --insecure
      

      Hoffe das geht - Danke,

      Axel

      1 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        Hilft Dir das?

        https://github.com/iobroker/ioBroker.ja … ile1-file2

        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          Schau dir mal die Doku zum nodejs Paket "request" an:

          https://github.com/request/request

          Eventuell muss das nachinstalliert werden, glaube aber nicht. Dann kannst du direkt in JavaScript bleiben und musst nicht den Umweg über exec gehen.

          1 Reply Last reply Reply Quote 0
          • M
            mickyboys last edited by

            Hallo,

            Ich bin noch recht neu in dem ganzen Thema. Mir fehlt der Anfang um weitermachen zu koennen.

            Wie muss solch ein Befehl aussehen, z.b. anhand meiner CURL.

            Danke fuer eure Hilfe.

            KR,

            Axel

            1 Reply Last reply Reply Quote 0
            • Jey Cee
              Jey Cee Developer last edited by

              Pack deinen curl befehl in ein Shellscript, da sind zu viele Zeichen drin die in Verbindung mit Javascript zu Problemen führen.

              Dieses Shellscript führst du dann so aus:

              exec('/Pfad_zum_Script/mein_script.sh', function(err, stdout, stderr) {
                  if (err) {
                     log(stderr,'error');
                     return;
                  }
                  Mach was mit stdout;
              });
              
              1 Reply Last reply Reply Quote 0
              • AlCalzone
                AlCalzone Developer last edited by

                @Jey Cee:

                da sind zu viele Zeichen drin die in Verbindung mit Javascript zu Problemen führen. `
                Ich sehe da kein Problem, ist doch alles in einfache Anführungszeichen verpackt. request hätte den Vorteil, dass man direkt im Skript die Übersicht hat, was funktioniert.

                Aber die exec-Variante geht natürlich auch.

                –

                Hier wäre die Variante mit request:

                var request = require('request');
                
                var options = {
                  url: 'https://192.168.1.11/dbbroker',
                  headers: {
                    'Authorization': 'Basic YWRtaW46OHAABBCCYQG8=',
                    'Origin': 'https://192.168.1.11',
                    // die restlichen Header 
                  },
                  body: ' [...]'
                };
                
                request.post(options, function(error, response, body) {
                  if (error) {
                    // auf Fehler reagieren
                  } else {
                    // mit der Antwort was machen
                  }
                });
                
                1 Reply Last reply Reply Quote 0
                • Jey Cee
                  Jey Cee Developer last edited by

                  @AlCalzone:

                  Ich sehe da kein Problem, ist doch alles in einfache Anführungszeichen verpackt. `

                  Ich hab das mal Test weise in ein Skript gepackt, der Editor Zeigt Fehler an egal ob man es mit " " oder ' ' umschließt. Das liegt daran das innerhalb des Befehls " und ' vorkommen.

                  1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer last edited by

                    Ich meinte natürlich nicht, den Befehl 1:1 in JS einzufügen. Siehe den Edit meiner vorherigen Antwort.

                    1 Reply Last reply Reply Quote 0
                    • M
                      mickyboys last edited by

                      @AlCalzone:

                      @Jey Cee:

                      da sind zu viele Zeichen drin die in Verbindung mit Javascript zu Problemen führen. `
                      Ich sehe da kein Problem, ist doch alles in einfache Anführungszeichen verpackt. request hätte den Vorteil, dass man direkt im Skript die Übersicht hat, was funktioniert.

                      Aber die exec-Variante geht natürlich auch.

                      –

                      Hier wäre die Variante mit request:

                      var request = require('request');
                      
                      var options = {
                        url: 'https://192.168.1.11/dbbroker',
                        headers: {
                          'Authorization': 'Basic YWRtaW46OHAABBCCYQG8=',
                          'Origin': 'https://192.168.1.11',
                          // die restlichen Header 
                        },
                        body: ' [...]'
                      };
                      
                      request.post(options, function(error, response, body) {
                        if (error) {
                          // auf Fehler reagieren
                        } else {
                          // mit der Antwort was machen
                        }
                      });
                      ```` `  
                      

                      Ich sehe den wichtigsten Befehl "shutdown" nicht in deinem Script. Die header kann er ergaenzen (obwohl ich nicht genau weiss wo sie anfengen und aufhoeren), aber der Shutdownbefehl zum Ende hin sieht anders aus, und genau das ist es was CURL tun soll - mein NAS runterfahren. 😉

                      1 Reply Last reply Reply Quote 0
                      • AlCalzone
                        AlCalzone Developer last edited by

                        Ich habe den Inhalt des Befehls nicht komplett abgetippt, das war ne Demonstration, wie das grundsätzlich geht. Daher auch die Kommentare

                        // die restlichen Header
                        und 
                        [...]
                        
                        

                        In die einfachen Anführungszeichen hinter "body:" kommt alles, was im CURL-Befehl hinter "–data" ebenfalls in einfachen Anführungszeichen steht.

                        Ebenso müssen die restlichen Header ergänzt werden. Ich habe 2 als Beispiel angegeben, den Rest musst du eben aus dem Befehl rauskopieren.

                        Schau dir den CURL-Befehl mal in seinen Bestandteilen an und schau, wo die in meinem JavaScript auftauchen. Wenn du am Ende nicht sicher bist, gerne nochmal fragen.

                        Ist nicht schwer, aber zumindest ein klein bisschen Eigenleistung sollte man schon erwarten 😉


                        > Die header kann er ergaenzen (obwohl ich nicht genau weiss wo sie anfengen und aufhoeren)
                        Kleiner Blick in den CURL-Befehl: Jeder Header wird mit -H eingeleitet und steht danach in einfachen Anführungszeichen. Der Teil vor und hinter dem : wird in JS jeweils in Anführungszeichen verpackt.

                        Es hilft, wenn man den CURL-Befehl mal in mehrere Zeilen umbricht, dann ist auch relativ schnell zu erkennen, was wo im JS auftaucht.

                        curl 
                        'https://192.168.1.11/dbbroker' 
                        -H 'Authorization: Basic YWRtaW46OHAABBCCYQG8=' 
                        -H 'Origin: https://192.168.1.11' 
                        -H 'Accept-Encoding: gzip, deflate, br' 
                        -H 'Accept-Language: en-US,en;q=0.8,de;q=0.6' 
                        -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36' 
                        -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' 
                        -H 'Accept: */*' 
                        -H 'Referer: https://192.168.1.11/admin/' 
                        -H 'X-Requested-With: XMLHttpRequest' 
                        -H 'Cookie: sn=3C83390100D72; ys-BrowseDataViewMode=s%3Aicons' 
                        -H 'Connection: keep-alive' 
                        --data ' <xs:nml xmlns:xs="http://www.netgear.com/protocol/transaction/NMLSchema-0.9" xmlns="urn:netgear:nas:readynasd" src="dpv_1490124698000" dst="nas"><xs:transaction id="njl_id_12134"> <xs:custom id="njl_id_12133" name="Halt" resource-id="Shutdown" resource-type="System"> <shutdown halt="true" fsck="false"></shutdown> </xs:custom> </xs:transaction></xs:nml> ' 
                        --compressed --insecure
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • M
                          mickyboys last edited by

                          Moin,

                          Ich bekomme es nicht hin. Wenn ich die CURL im Terminal spiele (MAC osx) faehrt das NAS sofort runter.

                          Aufgebrochen nach deiner Anleitung in javascript funktioniert nichts.

                          Ich versuch das ganze ueber einen Button im VIS zu aktivieren.

                          So sieht mein script aus… seht ihr den Fehler...

                          createState("javascript.0.Shutdown.ReadyNas516", 1); 
                          var request = require('request');
                          
                          var options = {
                            url: 'https://192.168.1.11/dbbroker',
                            headers: {
                              'Authorization': 'Basic YWRtaW46OHAABBCCYQG8=',
                              'Origin': 'https://192.168.1.11',
                              'Referer': 'https://192.168.1.11/admin/',
                              'X-Requested-With': 'XMLHttpRequest',
                              'Accept-Encoding': 'gzip, deflate, br',
                              'Accept-Language': 'en-US,en;q=0.8,de;q=0.6',
                              'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36',
                              'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                            },
                            body: ' <xs:nml xmlns:xs="http://www.netgear.com/protocol/transaction/NMLSchema-0.9" xmlns="urn:netgear:nas:readynasd" src="dpv_1490124698000" dst="nas"><xs:transaction id="njl_id_12134"> <xs:custom id="njl_id_12133" name="Halt" resource-id="Shutdown" resource-type="System"> <shutdown halt="true" fsck="false"></shutdown> </xs:custom> </xs:transaction></xs:nml> '
                          };
                          
                          request.post(options, function(error, response, body) {
                            if (error) {
                              // auf Fehler reagieren
                            } else {
                              // mit der Antwort was machen
                            }
                          });
                          

                          Das bekomm ich als Antwort wenn ich dir CURL im OSX Terminal aktiviere.

                          
                           <xs:nml xmlns:xs="http://www.netgear.com/protocol/transaction/NMLSchema-0.9" src="nas" dst="dpv_1490124698000" locale="en-us"><xs:transaction ref-id/type="0"></xs:transaction></xs:nml> 
                          

                          Danke euch

                          1 Reply Last reply Reply Quote 0
                          • AlCalzone
                            AlCalzone Developer last edited by

                            Ändere mal den letzten Block ab, er sollte einen Hinweis im Script-Log ausgeben, was schief läuft:

                            request.post(options, function(error, response, body) {
                              if (error) {
                                // auf Fehler reagieren
                                log("Fehler aufgetreten: " + error);
                              } else {
                                // mit der Antwort was machen
                                log("Antwort erhalten: " + body);
                              }
                            });
                            
                            1 Reply Last reply Reply Quote 0
                            • Bluefox
                              Bluefox last edited by

                              Man kann:

                              'Authorization': 'Basic YWRtaW46OHAABBCCYQG8=',
                              

                              damit ersetzen:

                              'Authorization': 'Basic ' + new Buffer(username + ':' + password).toString('base64');
                              

                              P.S. Ich habe alle YWRtaW46OHAABBCCYQG8 ersetzt. Weil da password drin steht.

                              1 Reply Last reply Reply Quote 0
                              • A
                                afroasiate last edited by

                                Hallo Leute

                                wollte keinen neuen Thread dafür auf machen, passt aber halbwegs hier rein:

                                Ich möchte gerne mittels executive diesen Shell Befehl ausführen, dazu muss ich einer Variable diesen Befehl zuweisen:

                                // nmap 192.168.100.0/24 -sP | grep report | awk '{print $5 " " substr($6,2,15) }'
                                var abfrage = 'nmap 192.168.100.0/24 -sP | grep report | awk '{print $5 " " substr($6,2,15) }'';
                                

                                Verstehe nicht wie ich in JavaScript die Hochkomas setzen muss damit er den String annimmt.

                                Über eine Hilfe wäre ich dankbar.

                                Grüße

                                Afro

                                1 Reply Last reply Reply Quote 0
                                • AlCalzone
                                  AlCalzone Developer last edited by

                                  @afroasiate:

                                  Verstehe nicht wie ich in JavaScript die Hochkomas setzen muss damit er den String annimmt. `

                                  // nmap 192.168.100.0/24 -sP | grep report | awk '{print $5 " " substr($6,2,15) }'
                                  var abfrage = 'nmap 192.168.100.0/24 -sP | grep report | awk \'{print $5 " " substr($6,2,15) }\'';
                                  

                                  Du musst die einfachen Anführungszeichen deines Strings escapen mit Backslash, damit sie nicht als Ende des Strings aufgefasst werden.

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

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  805
                                  Online

                                  31.7k
                                  Users

                                  79.8k
                                  Topics

                                  1.3m
                                  Posts

                                  6
                                  15
                                  7547
                                  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