Hallo Leute,
ich bin dabei mit der API zu experimentieren. Möchte später eine kleine Fernsteuerung über ioBroker realisieren.
Das Problem liegt derzeit darin, dass ich per API zwar erfolgreich GET-Befehle absetzen kann und auch Antworten bekomme. Aber sobald ich iwas mit POST absetze, kommt immer der Feher "failed" oder "error". Kann sich das jmd von euch erklären?
also z.B.: curl -k -u "$key:$secret" http://192.168.2.1/api/diagnostics/interface/getRoutes
funktioniert problemlos. Wenn ich aber
curl -k -u "$key:$secret" http://192.168.2.1/api/routes/routes/reconfigure/
absetze, kommt immer der Fehler zurück? Muss ich dem genutzten User noch irgendwo irgendwelche Rechte einräumen? Obowohl es sich als root genauso verhält. Kann ja eigentlich nicht ... sonst irgendjemand eine Idee?
Irgendwie fehlt da für einen POST Request doch ein --data oder ein --form oder ein -X post - je nachdem, was denn genau übertragen werden soll.
Na siehste, genau da fehlt mein Verständnis dafür. Da hab ich noch nen Gedankenhänger. An welcher Stelle müsste ich das einbauen?
Also eigentlich will ich nur die gateways neu laden. Aber ich glaube idese funktion gibt es nicht. oder? Also eigentlich will ich nur nen Reload machen.
Das müsste doch in der API-Doku stehen ... sorry, hab damit noch nichts gemacht, es war nur offensichtlich, dass dein curl-Aufruf so definitiv kein POST ist sondern ein GET.
Da ich grade sehr viel mit REST API rumgemacht habe, hier ein Beispiel (von einer API die ich gerade geschrieben habe weil ich grade kein besseres Beispiel habe):
Du musst halt bei POST, PUT, GET etc... das genaue Datenformat kennen was der API Endpunkt erwartet, ansonsten gibt es failed. Und wenn die Authorization nicht stimmt, dann passiert auch nichts.
curl -v -k -X POST "https://192.168.3.1/api/caddy/ReverseProxy/add" \
-H "Authorization: Basic API-KEY" \
-H "Content-Type: application/json" \
-d '{"reverse": {"Enabled": "1", "FromDomain": "example.com", "FromPort": "443", "ToDomain": "192.168.1.2", "ToPort": "443", "Description": "Test"}}' \
--insecure
Wenn eine API keine Daten erwartet, schickt man einfach ein leeres json:
-d '{}' \
https://docs.opnsense.org/development/api.html
Den API-KEY wandelt man am besten in base64 um, so:
# Replace these with your actual key and secret
API_KEY='...'
API_SECRET='...'
# Base64 encode the credentials
ENCODED_CREDENTIALS=$(echo -n "${API_KEY}:${API_SECRET}" | base64)
Mach doch im Chrome F12 und dann klick auf Add, dann siehst du ob post und wie genau der Endpoint heisst