NEWS
HTTP POST mit JSON
-
Hallo,
es gibt schon so einige Beiträge zu dem Thema, aber leider konnte ich keine Lösung finden.
Ich habe eine alte ioBroker Instanz (v6.5.2). Dort läuft ein Skript, mit dem ich Daten als HTTP POST Request inkl. JSON verschicke.
Ich verwende eine kleine JavaScript Funktion...
... die ich dann wie folgt aufrufe:
Jetzt habe ich eine neue ioBroker Instanz eingerichtet (v7.1.2) und wollte das Skript verwenden.
Es kommt die Meldung:
script.js.common.Post_Value: request package is deprecated - please use httpGet (or a stable lib like axios) instead!
Ok, nach einiger Recherche habe ich dann versucht, den neuen Blocky Block zu werden. Das Ganze sieht dann so aus:
Es kommt keine Fehlermeldung und im Log sehe ich Folgendes:
Hm soweit so gut, allerdings kommt beim Empfänger nichts an und ich kann es mir nicht erklären.
Habt Ihr vielleicht eine Idee?Wenn ich, testweise, die URL falsch schreibe, erhalte ich die gleiche Log-Ausgabe.
Gruß Andreas
-
@starlord42
Ich würde das JSON nicht von Hand zusammenklöppeln. -
@starlord42 sagte in HTTP POST mit JSON:
Habt Ihr vielleicht eine Idee?
wenn ich mir die beiden blocklys anschaue, dann gibt es schon unterschiede
- die url unterscheidet sich
- die art und weise wie du den json string zusammenbaust ist auch unterschiedlich.
wenn man a gegen b austauscht und dann noch drum rum auch noch viele dinge anders macht ist es echt schwierig den fehler zu finden
gibt es eine api beschreibung?
evtl muss man noch den json header (content-type) bei der neuen funktion setzen, aber das hängt von der genutzten api beschreibung ab.
auch kann es ein unterschied machen ob man der funktion einen string oder ein objekt übergibt. von alleine weiß die funktion ja erstmal nicht ob es ein json ist.
aber ich weiß nicht, wieviel automatismus da drin versteckt ist. im hintergrund wird axios verwendet.
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#httppost -
@codierknecht
Danke für den Hinweis, dass man ein Objekt auch so zusammenbauen kann.
Mit folgendem Blockly hat es jetzt funktioniert, wobei ich die alte Javascript Funktion verwendet habe.
Ich bekomme zwar eine Warnung, dass die Funktion veraltet ist, funktionieren tut es aber dennoch.
Mit der neuen Funktion hatte ich leider kein Glück.
@OliverIO
Ja, die URLs unterscheiden sich, das macht in dem Fall aber keinen Unterschied, da es unterschiedliche Empfänger sind.
Eine Beschreibung der Schnittstelle ist verfügbar (Streams and Sensor Data, ich kann aber nicht erkennen, ob der Header noch weitere Infos benötigt. Es gibt ein paar Postman Beispiele und dort kann ich Folgendes sehen:
Ich wüsste aber nicht, wie ich z.B. den Content-Type in dem Blockly eintragen soll.Also, grundsätzlich kann ich erst einmal damit leben - vielen Dank für die Unterstützung - allerdings wäre es schon interessant zu sehen, wie/ob das mit dem neuen Blockly Block geht.
Gruß Andreas