NEWS
[Frage] HTTP POST - Cookie einfügen ? (Sony TV)
-
MOD-Edit by eric2905; 03.05.2017/09:55; Betreff angepasst
Hallo,
ich möchte meinen Sony Bravia TV mit ioBroker steuern, der syntax und die vorgehensweise sind mir bekannt.
Der TV möchte JSON Strings per HTTP POST haben, bevor er aber eine Steuerung zulässt muß man sich als "Fernbedienung" Registrieren, lesen geht auch ohne Registrierung
die Vorgehensweise zur Registrierung ist wie folgt:
1. POST an http://192.168.xxx.xxx/sony/accessControl mit JSON String:
{"id":13,"method":"actRegister","version":"1.0","params":[{"clientid":"ioBroker:1","nickname":"ioBroker"},[{"clientid":"ioBroker:1","value":"yes","nickname":"ioBroker","function":"WOL"}]]}
2. TV zeigt darauf hin eine Meldung mit PIN
3. PIN in base64 codieren und im Header mit 'Authorization':'Basic Ojg2MzA=' zurück schicken
4. TV Sendet darauf hin ein Cookie z.b. auth=eefbfe6c3bdab6b7876c560cbe292ddb82f425bca256b226d487w03b39fc6a5b <- bis hier hin alles ok, und läuft
5. das Cookie muß jetzt für jeden weitern POST Request mit gesendet werden
jetzt das Problem: wie sende ich das coockie ? ich denke es muß im Header definiert werden ?!
meine Code bis jetz:
var request = require('request'); // Configure the request var options = { url: 'http://192.168.188.24/sony/system', //url: 'http://192.168.188.24/sony/accessControl', method: 'POST', headers: { 'Authorization':'Basic Ojg2MzA=', }, form: '{"method": "setPowerStatus","params": [{"status": false}],"id": 102}' //form:' {"id":13,"method":"actRegister","version":"1.0","params":[{"clientid":"ioBroker:1","nickname":"ioBroker"},[{"clientid":"ioBroker:1","value":"yes","nickname":"ioBroker","function":"WOL"}]]}' }; // Start the request request(options, function (error, response, body) { if (!error && response.statusCode == 200) { // Print out the response body //console.log(body); } console.log('Response:' + JSON.stringify(response)); console.log('Error: ' + error); console.log('Body: '+ body); }); -
Schau mal hier: https://github.com/request/request
fast ganz unten
> Cookies are disabled by default (else, they would be used in subsequent requests). To enable cookies, set jar to true (either in defaults or options).Da sind auch Beispiele für kompliziertere Fälle, wie das Einfügen eines eigenen Cookies:
var j = request.jar(); var cookie = request.cookie('key1=value1'); var url = 'http://www.google.com'; j.setCookie(cookie, url); request({url: url, jar: j}, function () { request('http://images.google.com') }) -
hat sich erledigt, klappt jetzt :-)
hier die Lösung
var request = require('request'); var url='http://192.168.188.24/sony/system'; //url: 'http://192.168.188.24/sony/accessControl', PIN=Buffer.from(':'+'0396'); // Configure the request var options = { url: url, jar: true, method: 'POST', headers: {'Authorization':'Basic '+ PIN.toString('base64')}, form: '{"method": "setPowerStatus","params": [{"status": false}],"id": 102}' //form:' {"id":13,"method":"actRegister","version":"1.0","params":[{"clientid":"ioBroker:1","nickname":"ioBroker"},[{"clientid":"ioBroker:1","value":"yes","nickname":"ioBroker","function":"WOL"}]]}' }; var j = request.jar(); var cookie = request.cookie('auth=a63b94235f935cc102ef679eca03081b217b0df10c641099c90d02f8c651d0fe'); // Start the request j.setCookie(cookie,url); request(options, function (error, response, body) { console.log('Response:' + JSON.stringify(response)); console.log('Error: ' + error); console.log('Body: '+ body); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden