OPNsense API

Started by Borsel, November 27, 2023, 12:19:00 PM

Previous topic - Next topic
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.
Deciso DEC750
People who think they know everything are a great annoyance to those of us who do. (Isaac Asimov)

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.
Deciso DEC750
People who think they know everything are a great annoyance to those of us who do. (Isaac Asimov)

November 28, 2023, 07:33:07 PM #4 Last Edit: November 28, 2023, 07:38:32 PM by Monviech
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)
Hardware:
DEC740

Mach doch im Chrome F12 und dann klick auf Add, dann siehst du ob post und wie genau der Endpoint heisst