REST - Postbefehl (Anruf) per Kommandozeile absetzen

Hallo zusammen,

hier habe ich mal eine dumme frage… ich brauche eine Lösung für Schimpansen um aus einer Drittanwendung einen Anruf zu initiieren (Parametergesteuert).

Viel geschaut - wenig gefunden und dann REST aktiviert und getestet. In der MD-Oberfläche gleich einen Test reingemacht - klappt super. Ich also ein progrämmchen gesucht mit dem man post’s absetzten kann (curl.exe ist wohl sehr verbreitet…) aber bekomme als Fehler immer ein “409 Conflict” zurück.

Die Syntax ist ja relativ simpel… nichtsdestotrotz habe ich tausend variationen des Postbefehls durchprobiert - ergebnis ist immer 409 :frowning:


curl.exe -v -u uwe.steuer:passwort -X POST http://10.0.20.99/services/ipphone/00A41371D4FA/action -d {"action":"dial","destination":"00151123456789"}

Das passende Log dazu:

  • Trying 10.0.20.99…
  • Connected to 10.0.20.99 (10.0.20.99) port 80 (#0)
  • Server auth using Basic with user ‘uwe.steuer’
    > POST /services/ipphone/00A41371D4FA/action HTTP/1.1
    > Authorization: Basic dXdlLnN0ZXVlcjozM0hhc2VuZ3J1YmU4MyQ=
    > User-Agent: curl/7.41.0
    > Host: 10.0.20.99
    > Accept: /
    > Content-Length: 39
    > Content-Type: application/x-www-form-urlencoded
    >
  • upload completely sent off: 39 out of 39 bytes
    < HTTP/1.1 409 Conflict.
    < Date: Tue, 14 Apr 2015 10:01:34 GMT
    < Server: Apache
    < Set-Cookie: PHPSESSID=765oa9q60lsdlneqmo2edr0j81; path=/
    < Expires: Thu, 19 Nov 1981 08:52:00 GMT
    < Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
    < Pragma: no-cache
    < Connection: close
    < Content-Length: 0
    < Vary: Accept-Encoding
    < Content-Type: text/html;charset=utf-8
    <
  • Closing connection 0

Habt ihr Ideen? Hab ich einen Denkfehler? Bin gefrustet :frowning:

Danke schon einmal

Uwe

Hallo Uwe,

hast du wie hier beschrieben einen REST-Benutzer auf der MobyDick angelegt? Ansonsten darfst du nicht von externen systemen aus auf die API zugreifen.

Grüße,
Jan

ja, ist passiert.

über die /services/apidoc seite musste ich mich auch authentifizieren.
Ferner gibt es bei curl auch einen “Zugriff verweigert” wenn ich es ohne oder mit falschen zugangsdaten probiere.

Hallo Uwe,

Du bist schon sehr nahe dran.
Es fehlt der content type header und hinten bei den Daten fehlen quotes.

Mach bitte folgendes:

Variante A) mit formalem content Header

curl.exe -v -u uwe.steuer:passwort -H "Content-Type: application/json" -X POST http://10.0.20.99/services/ipphone/00A41371D4FA/action -d '{"action":"dial","destination":"0151123456789", "prefix":"auto"}'

Variante B) mit implizitem json content in der URL

curl.exe -v -u uwe.steuer:passwort -X POST http://10.0.20.99/services/ipphone.json/00A41371D4FA/action -d '{"action":"dial","destination":"0151123456789", "prefix":"auto"}'

Die zusätzliche 0 würde ich zugunsten von “prefix=auto” weglassen, dadurch entscheidet die MobyDick selbst über den prefix (wird auch so im Client genutzt).

Viel Erfolg & Gruß,

Thomas

Mhh… da muss noch irgendetwas anderes sein. Ich bekomme nach wie vor mein “409 Conflict” in allen Varianten (und noch ein paar abwandlungen davon…)

Unter http://md/services klappt das exakt so prima

bei curl bekomme ich nach wie vor ein “409 Conflict, action not successfull”

Was es wohl nicht ist -> Authentifizierung - Änder ich name und/oder passwort gibt es authentifizierungsfehler
Was es wohl nicht ist -> Pfad - Ändere ich hier etwas hat er probleme mit dem pfad…

Eigentlich bleibt dann nur curl selbst übrig das er das seltsam formatiert übergibt, oder? Nur google spuckt nicht wirklich alternativen aus - post’s auf kommandozeile ist curl wohl state of the art… :frowning:

Probier bitte mal folgende Dinge:

a) mach den curl Aufruf direkt in der MobyDick (dann natürlich ohne .exe)
b) schau nach /var/log/mobydick/rest.log vielleicht gibt es dort einen Hinweis

Ansonsten schaut der Aufruf richtig aus.

:eek: Beim Aufruf in der MD gehts sofort ohne murren :eek:

Das log gibt nicht arg viel her…

2015-04-15 08:40:37 rest_ipphone error : Unknown Action:
2015-04-15 08:40:54 rest_ipphone error : Unknown Action:
2015-04-15 08:41:06 rest_ipphone error : Unknown Action:
2015-04-15 08:41:13 rest_ipphone error : Unknown Action:
2015-04-15 08:47:37 rest_ipphone error : Unknown Action:

Weiß im Moment nicht ob ich mich freuen oder ärgern soll. Zwar nicht gelöst aber zumindest schon schwer eingegrenzt… Der Windowsclient scheint es ja dann irgendwie anders zu schicken als die Linuxversion…

Schau mal bitte hier: rest - How do I POST JSON data with cURL? - Stack Overflow

Neben gefühlten 30 Parameter-Varianten für “Json per curl als http post senden” steht da:

For windows, single quotes around json did not work and I ended up escaping double quotes. curl -X POST -H “Content-Type: application/json” -d “{ "key1": "value1" }” http://localhost:3000/api/method

Magst das mal probieren?

Jackpot… zumindest die richtige Fährte.

Das | klappt unter windows überhaupt nicht - das interpretiert er sonstwie und es kommt als Meldung “Die Syntax für Dateinamen ist falsch” und ähnliches krudes zeug…

Aber mit deinen Suchbegriffen ein wenig modifiziert habe ich dann diese Schreibweise gefunden:


curl -v -u "uwe.steuer:passwort" -X POST "http://10.0.20.99/services/ipphone.json/00041371D4FA/action" -d "{\"action\":\"dial\",\"destination\":\"00151123456798\"}"

Das macht es zwar nicht gerade leserlicher aber hat auf Anhieb funktioniert.

Vielen Dank - alleine hätte ich es nicht geschafft… :wink:

Schön das es jetzt funktioniert!