Senden einer POST-Anforderung an die REST-API
Verwenden Sie eine HTTP POST-Anforderung, um einzelne oder mehrere RPC-Anforderungen an die REST-API zu senden. Sie können die POST-Anforderung verwenden, um das Gerät zu konfigurieren.
Für einen einzelnen rpc Befehl lautet das allgemeine Format der Endpunkte:
scheme://device-name:port/rpc/method[@attributes]/params
-
scheme:httpoderhttps -
method: Der Name eines beliebigen Junos OS-Befehlsrpc. DermethodName ist identisch mit dem tag-Element. Weitere Informationen finden Sie im Junos XML-API-Explorer. -
params: Optionale Parameterwerte (name[=value]).
Um Ihre Anforderung zu authentifizieren, können Sie eine der folgenden Methoden verwenden. Wir empfehlen, die netrc Option zu verwenden, da sie sicherer ist.
-
Übermitteln Sie den base64-codierten Benutzernamen und das Kennwort, die im Authorization-Header enthalten sind.
curl -u "username:password" http://device-name:port/rpc/get-interface-information -
Alternativ können Sie eine .netrc-Datei verwenden, um die Anmeldeinformationen zu speichern.
Erstellen Sie im Home-Verzeichnis des Benutzers die .netrc-Datei , und geben Sie den Hostnamen, den Benutzernamen und das Kennwort für das Remotegerät an. Zum Beispiel:
user@host:~$ cat ~/.netrc machine 172.16.2.1 login username password password
Stellen Sie sicher, dass nur der Benutzer Lese- und Schreibberechtigungen für die Datei hat.
user@host:~$ chmod 600 .netrc
Geben Sie in der Anforderung die
--netrcOption an. Zum Beispiel:user@host:~$ curl --netrc http://172.16.2.1:3000/rpc/get-interface-information
Um Daten als Abfragezeichenfolge im URI für POST-Anforderungen anzugebenrpc, übermitteln Sie die Abfragedaten im POST-Text. In solchen Fällen können Sie as oder application/xml, text/plain Content-Type wie in diesen äquivalenten cURL-Aufrufen gezeigt:
curl --netrc http://device-name:port/rpc/get-interface-information --header "Content-Type: text/plain" -d "interface-name=cbp0" curl --netrc http://device-name:port/rpc/get-interface-information --header "Content-Type: application/xml" -d "<interface-name>cbp0</interface-name>"
Sowohl für einzelne als auch für mehrere RPC-Befehle können HTTP Accept-Header verwendet werden, um das Rückgabeformat mit einem der folgenden Content-Type-Werte anzugeben:
-
application/xml (Standardeinstellung)
-
application/json
-
text/plain
-
text/html
Der folgende cURL-Aufruf gibt beispielsweise das Ausgabeformat JSON an:
curl --netrc http://device-name:port/rpc -d "<get-software-information/>" --header "Accept: application/json"
Sie können das Ausgabeformat auch mit dem optionalen format Attribut angeben:
curl --netrc http://device-name:port/rpc -d "<get-software-information format='json'/>"
Der Standard-Content-Type für POST-Anforderungen, die Argumente im Text enthalten, ist application/xml. Wenn Sie einen anderen Inhalt verwenden möchten, z. B. eine Abfragezeichenfolge, können Sie den Content-Type text/plain angeben. Geben Sie das format Attribut in Konfigurationsbefehlen an.
Wenn Sie mehrere rpc Befehle in einer einzelnen Anforderung ausführen, lautet das allgemeine Format des Endpunkts:
scheme://device-name:port/rpc
Die RPCs müssen als XML-Daten im POST-Text bereitgestellt werden. Der Content-Type für die Antwort ist mehrteilig/gemischt, wobei Begrenzung und Untertyp der Ausgabe jeder RPC-Ausführung zugeordnet sind. Das im Accept-Header angegebene Format wird als Ausgabeformat für jeden der RPCs verwendet, wenn ein format Attribut fehlt. Wenn Sie keinen Accept-Header oder das format Attribut in einem bestimmten RPC angeben, ist das Standardausgabeformat XML.
Wenn Sie z. B. eine einzelne HTTP-Anforderung zum Ausführen der RPCs get-software-information senden und get-interface-informationeine POST-Anforderung an /rpc with senden "Auth: Basic <base64hash>"möchten, "Content-Type: application/xml". Der POST-Text würde Folgendes enthalten:
<get-software-information/><get-interface-information/>
Hier ist ein cURL-Aufruf mit diesem POST-Text:
curl --netrc http://device-name:port/rpc -d "<get-software-information/><get-interface-information/>"
Die Ausgabe der Anforderung, die XML als Standard enthält, sieht wie folgt aus:
HTTP/1.1 200 OK Content-Type: multipart/mixed; boundary=fkj49sn38dcn3 Transfer-Encoding: chunked Date: Thu, 20 Mar 2014 11:01:27 GMT Server: lighttpd/1.4.32 --fkj49sn38dcn3 Content-Type: application/xml <software-information> <host-name>...</host-name> ... </software-information> --fkj49sn38dcn3 Content-Type: application/xml <interface-information> <physical-interface>...</physical-interface> </interface-information> --fkj49sn38dcn3--
Sie können auch das Ausgabeformat für jedes der Elemente im POST-Text angeben. Die folgende Anforderung gibt z. B. JSON für den get-interface-information RPC und Nur-Text für den get-software-information RPC aus:
curl --netrc http://device-name:port/rpc -d "<get-interface-information/><get-software-information format='text'/>" --header "Accept: application/json"
Wenn beim Ausführen mehrerer RPCs ein Fehler auftritt, wird der Fehler standardmäßig ignoriert und die Ausführung fortgesetzt. Wenn Sie beenden möchten, wenn der erste Fehler auftritt, geben Sie das Flag stop-on-error im URI an. Die folgende Anforderung konfiguriert z. B. das Gerät und wird beendet, wenn ein Fehler auftritt:
curl --netrc http://device-name:port/rpc?stop-on-error=1
-d "<lock-configuration/>
<load-configuration>
<configuration><system><hostname>foo</hostname></system></configuration>
</load-configuration>
<commit/>
<unlock-configuration/>"