NEWS
XML oder JSON Requests senden
-
Hi,
Ich möchte ein XML oder JSON Requests mit dem ioBroker an dieses System senden:
https://help.internetx.com/display/APIXMLDE/API-Grundlagen+XML
Es geht darum eine IP-Adresse hinter einer Subdomain zu ändern. Also praktisch mein eigener, kleiner Dyndns Dienst.
Habe sowas aber noch nicht gemacht. Bin über jeden Hinweis dankbar, wie man sie da am besten rantastet.
LG, Mitch
-
@mitch Kannst Du mit allen 3 Logikmaschinen: NodeRed, Blockly und Javascript machen. Wenn Du Hilfe bei NodeRed brauchst, dann melde Dich - für die anderen gibts sicher genügend Hilfe von anderen. Du musst Dich halt entscheiden, welche Logikmaschine Du nutzen möchtest.
-
Ich habe gerade noch ein CLI Skript gefunden, wenn ich das auf dem ioBroker System packe und vom ioBroker ein CLI Kommando absetzen kann, würde das auch gehen:
https://github.com/pngmbh/autodns-cli
Was findet ihr besser/einfacher?
-
@mickym sagte in XML oder JSON Requests senden:
@mitch Kannst Du mit allen 3 Logikmaschinen: NodeRed, Blockly und Javascript machen. Wenn Du Hilfe bei NodeRed brauchst, dann melde Dich - für die anderen gibts sicher genügend Hilfe von anderen. Du musst Dich halt entscheiden, welche Logikmaschine Du nutzen möchtest.
Dann würde ich node Red bevorzugen. Müsste ich einen http requests nutzen, oder gibt es da was besseres?
Vergiss meinen vorherigen Post. Das mit dem cli ist nicht nötig.icb fand nur interessant, dass das Beispiel in der Beschreibung genau das machen soll, was ich möchte. Bei einer Subdomain die IP Adresse updaten.
-
@mitch na ja Du musst halt wieder was installieren - die JSON API funktioniert out of the box. Auf der Webseite kannst probieren. Ja Du nutzt einfach http Request Nodes. Wenn Du über POST verschicken kannst, kannst Du einfach ein payload Objekt schicken. Auf der Webseite die Du gepostet hast, kannst ja direkt die Befehle absetzen. Wenn Du weißt wie und welcher funktioniert, dann kann man das ja entsprechend in der http Request Node umsetzen.
-
@mickym sagte in XML oder JSON Requests senden:
@mitch na ja Du musst halt wieder was installieren - die JSON API funktioniert out of the box. Auf der Webseite kannst probieren. Ja Du nutzt einfach http Request Nodes. Wenn Du über POST verschicken kannst, kannst Du einfach ein payload Objekt schicken. Auf der Webseite die Du gepostet hast, kannst ja direkt die Befehle absetzen. Wenn Du weißt wie und welcher funktioniert, dann kann man das ja entsprechend in der http Request Node umsetzen.
Kannst du mir vielleicht bei dem Aufbau des JSON helfen. Das CLI Skript könnte dabei helfen, da hier genau mein Beispiel drin ist:
$ ./autodns-cli update foo.example.org 127.0.0.1
Bin irgendwie zu blöd dafür...
-
@mitch Ich habs zwar versucht - aber auf die schnelle kann ich Dir da auch nicht helfen. Sorry.
Hier steht ein JSON - wie man eine Domäne updated:
https://help.internetx.com/display/APIXMLDE/Domain+Update
und hier der Aufbau eines Domain Objektes:
https://help.internetx.com/display/APIXMLDE/Objekt+Domain
Du kannst es ja mal so versuchen:
{ "name": "domain.de", "nameServers": [ { "name": "string", "ttl": 0, "ipAddresses": [ "string" ] } ]}
Das Objekt mal in eine payload - ein PUT Request machen und an
/domain/{name}
aber wie gesagt ich kenn mich da auch nicht aus, so würde ich mich halt rantasten.
-
Ich hatte die letzten Tage viel zu tun und konnte mich nicht darum kümmern. Ich habe nun erfolgreich mittels Postman dieses XML Post zur Anbieter URL (https://gateway.autodns.com) gesendet und es funktioniert:
<?xml version="1.0" encoding="utf-8"?>
<request>
<auth>
<user>username</user>
<password>passwort</password>
<context>4</context>
</auth>
<task>
<code>0202001</code>
<default>
<search_and_replace>
<search>1.2.3.4</search>
<replace>1.2.3.5</replace>
</search_and_replace>
</default>
<zone>
<name>meinedomain.de</name>
<system_ns>a.ns14.net</system_ns>
</zone>
</task>
</request>Jetzt muss ich das nur noch aus Node RED hinbekommen. Allerdings finde ich dort kein XML, sondern nur JSON.
Kannst jemand einen Flow posten, wie es funktionieren müsste?
Wie macht man das jetzt am günstigsten. Ich habe eine alte IP-Adresse 1.2.3.4 und eine neue IP-Adresse 1.2.3.5. Soll ich damit jetzt das XML in ioBroker Objekt bauen, damit ich es über den Flow absetzen kann, oder kann ich im Flow auch mit Variablen arbeiten, die automatisch die alte IP-Adresse und neue IP-Adresse aus den ioBroker Objekten zusammenbaut. Praktisch wie eine Vorlage.
Ich bräuchte ja auch noch ein Trigger-Objekt, was auf true steht, damit er losläuft und den XML Request per POST absetzt.
Was würdest ihr tun? Ich denke so eine Vorlage wäre wesentlich einfacher.
-
@mitch Hänge mal eine debug Node an Deine HTTP-Request Node um zu sehen, was aus dem Abruf rauskommt. JSON ist wesentlich leichter zu verarbeiten. Du kannst einfach meinen Flow verwenden, um aus dem JSON die einzelnen Werte in einzelne Datenpunkte zu schreiben: https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
Also wenn Du JSON zurück bekommst, ist das wesentlich besser.
Den Trigger kannst Du selbst wählen - ob Du über einen Button in der Visualisierung triggerst oder in zeitlichen Intervall - alles ist möglich. - Ich zeige es Dir gerne, wenn Du mal mehr Zeit hast und die Antworten nicht in Tagesintervallen, sondern in Minutenintervallen kommen.
-
Das mit JSON ist mir bewusst. Allerdings ist die JSON-Schnittstelle des Anbieters nicht so gut (oder in meinem Fall einfach) dokumentiert, wie xml. Und XML funktioniert bei mir schonmal, wenn ich es mittels Postman absende.
Meine Erwartungshaltung war, dass ich zumindestens eine Rückmeldung der API vom Anbieter bekomme. Aber unter Debug wird nichts geloggt.
Bei XML sehe ich halt mehr Land. Wenn ich einen statischen XML-Code aus dem ioBroker dahin senden kann, der dann auch umgesetzt wird., muss ich den XML-Code noch mit Platzhaltern versehen und durch die Objekte ersetzen.
Ich denke, das bekomme ich hin.
-
@mitch
evtl hilft das weiterhttps://stackoverflow.com/questions/37234407/how-to-post-with-xml-payload-in-node-red
dem html request ist es egal was es da sendet, beides ist text. damit der empfänger versteht was da ankommt muss man den content type richtig setzen.
eine detailliertere Beschreibung der http request node ist hier
https://stevesnoderedguide.com/node-red-http-request-node-beginnerswie authentifizierst du die anfrage? sonst könnte ich die ja auch senden?
-
@oliverio Authentifizierung wird über Elemente in der XML. Da gibt es Username und Passwort, so wie auch unter dem Link von dir.
-
@mitch
Ja hab das gesehen. Allerdings kenn ich das so das man durch die Anmeldung meist ein Token oder sessionid erhält, die man dann in den folgenden Anfragen mitgibt.
Http ist eigentlich ein zustandsloses Protokoll. D.h. Der Server kann aufeinander folgende Anfragen noch von einander unterscheiden, daher dann ein Kennzeichen um das alles zu verbinden.
Im Browser wäre die Alternative ein Cookie oder eine sessionid in der url, wobei man das aus Sicherheitsgründen nicht mehr macht.
Das seh ich hier aber nicht. D.h. Die Authentifizierung läuft dann auf Basis der Absender ip, was ich persönlich als relativ unsicher einschätze. Aber evtl hab ich da auch noch was überlesen.