NEWS
[gelöst] http request
-
Hallo zusammen,
mal ne Frage zum http-request. Ich lese und probiere nun schon Stunden rum, bekomme es aber nicht auf die Kette.
wenn ich folgendes im Browser eingebe, dann bekomme ich dieses Ergebnis und ein Relais an einer Controler-Card wird geschalten.
http:
http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0
Ergebnis:````
0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1Nun wollte ich das in javascript mittels request machen, da passiert nichts. Es wird wohl hauptsächlich dran liegen, dass ich nicht ganz raffe was da passiert. script:```` var url = 'http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0'; var request = require('request'); request( { method: 'GET', uri: url, } , function (error, response, body) { log('error: ' + error); log('Status: '+ response.statusCode); log('response: '+ JSON.stringify(response)); } );
Ergebnis von response:````
javascript.0 script.js.Testscripte.Skript1: response: {"statusCode":401,"body":"","headers":{"server":"PoolController","www-authenticate":"Poolauth realm="NeedPassword"","content-type":"text/html"},"request":{"uri":{"protocol":"http:","slashes":true,"auth":null,"host":"192.168.2.37:8091","port":"8091","hostname":"192.168.2.37","hash":null,"search":"?R16=1&RT16=0","query":"R16=1&RT16=0","pathname":"/SetState.pl","path":"/SetState.pl?R16=1&RT16=0","href":"http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0"},"method":"GET","headers":{}}}wenn ich ****"www-authenticate":"Poolauth realm=\"NeedPassword\"****, denke ich hier muss noch ****auth**** behandelt werden. Und ab hier bin ich total raus… :shock: Vielleicht kann sich jemand erbarmen mir einen Tip zu geben.
-
so
var url; var request; request = require('request'), url = "http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0"; request({url : url}, function (error, response, body) { // Do more stuff with 'body' here });
-
hallo artec,
bis auf "method: 'GET'," ist das doch der Selbe Code, oder?
Jedenfalls ist das Ergebnis im Browser nicht relevant, nur das tatsächliche Schalten des Relais.
Ich bekomme jedoch immer Status 401. Daher komme ich ach nicht weiter.
Wie gesagt, der http-Befehl im Browser geht, wenn ich das in javascript verwurste geht es nicht mehr.
-
und wen du es auf der console ausfuehrst als alternative ?
-
also aus dem Script heraus geht es mit:
exec('wget http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0');
hier ist aber zwischen Befehl und Ausführung ein Zeitversatz den ich nicht gut finde (knapp 5 Sekunden).
Im Prinzip will ich mit einem Xiaomi-Taster bzw. einem Bewegungsmelder Leuchten im Garten schalten, die an meinem Pool-Controller angeschlossen sind.
Und beim "Licht schalten" ist ein "Versatz" von über einer Sekunde absolut nicht schön.
Daher auch die Überlegung mit dem request. Das muss doch damit auch gehen? Hat noch wer Ideen?
-
Verwende mal statt request das node Modul http (ist in nodejs enthalten und muss nicht im JS Adapter eingetragen werden).
Und dann nicht get sondern post.
Gesendet von meinem m8 mit Tapatalk
-
schon mal probiert das selbe, aber ohne GET??
ist ja immerhin ein POST request, daher nimm die method mal ganz weg
-
hast du````
request -
schon mal probiert das selbe, aber ohne GET??
ist ja immerhin ein POST request, daher nimm die method mal ganz weg `
nein, geht auch nicht -
hast du
request
in den javascript Einstellungen (Adapter) als Parameter angegeben `
ja, ist eingetragen -
Ist da irgendeine Authentisierung eingeschaltet?
401 heisst "Unauthorized" …
Im Prinzip bekommst ja eine Antwort, nur sagt das Ding halt Du darfst ned...
-
@Jey Cee:Verwende mal statt request das node Modul http (ist in nodejs enthalten und muss nicht im JS Adapter eingetragen werden).
Und dann nicht get sondern post.
Gesendet von meinem m8 mit Tapatalk ` stell ich mich grad ne bissel blöd an. Hast du ein Beispiel?
-
@dwm:Ist da irgendeine Authentisierung eingeschaltet?
401 heisst "Unauthorized" …
Im Prinzip bekommst ja eine Antwort, nur sagt das Ding halt Du darfst ned... ` Jupp, dass hattte ich schon gesehen. Und hier liegt ja das Problem.
Ich weis nicht wie ich mit "request = require('request')" user/password mitgeben kann, sodass das ganze letztlich funktioniert.
-
Ich weis nicht wie ich mit "request = require('request')" user/password mitgeben kann, sodass das ganze letztlich funktioniert. `
https://www.npmjs.com/package/request#http-authentication -
Ich weis nicht wie ich mit "request = require('request')" user/password mitgeben kann, sodass das ganze letztlich funktioniert.
[https://www.npmjs.com/package/request#http-authentication](https://www.npmjs.com/package/request#http-authentication)
der Link war gestern meine Abendlektüre, leider ohne Ergebnisse. -
also aus dem Script heraus geht es mit:
exec('wget http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0');
hier ist aber zwischen Befehl und Ausführung ein Zeitversatz den ich nicht gut finde (knapp 5 Sekunden).
Im Prinzip will ich mit einem Xiaomi-Taster bzw. einem Bewegungsmelder Leuchten im Garten schalten, die an meinem Pool-Controller angeschlossen sind.
Und beim "Licht schalten" ist ein "Versatz" von über einer Sekunde absolut nicht schön.
Daher auch die Überlegung mit dem request. Das muss doch damit auch gehen? Hat noch wer Ideen? `
hier hast du aber auch keine Authentisierung und es klappt
-
also aus dem Script heraus geht es mit:
exec('wget http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0');
hier ist aber zwischen Befehl und Ausführung ein Zeitversatz den ich nicht gut finde (knapp 5 Sekunden).
Im Prinzip will ich mit einem Xiaomi-Taster bzw. einem Bewegungsmelder Leuchten im Garten schalten, die an meinem Pool-Controller angeschlossen sind.
Und beim "Licht schalten" ist ein "Versatz" von über einer Sekunde absolut nicht schön.
Daher auch die Überlegung mit dem request. Das muss doch damit auch gehen? Hat noch wer Ideen? `
hier hast du aber auch keine Authentisierung und es klappt `
jupp da hast du recht, dennoch ist mir unklar warum es mit request nicht klappt. -
probiers mal ganz erinfach:
var request = require('request'); request("http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0").on('error', function (e) { log(e, 'error');});
-
probiers mal ganz erinfach:
var request = require('request'); request("http://192.168.2.37:8091/SetState.pl?R16=1&RT16=0").on('error', function (e) { log(e, 'error');}); ```` ` gemacht, passiert nichts, kein Schalten, kein Log…
-
den javaScript adpater hast du mal auf debug gestellt?
siehst du eigentlich irgendwo einen log, dass er versucht diesen request abzuschicken?