Senden einer GET-Anforderung an die REST-API
Für einen 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 GET-Anforderungen anzugeben rpc , können Sie einen ? folgenden URI mit dem Trennzeichen verwenden, das & mehrere Argumente trennt, oder das / Trennzeichen verwenden, wie in diesen entsprechenden cURL-Aufrufen gezeigt:
Zum Beispiel:
curl --netrc http://device-name:port/rpc/get-interface-information?interface-name=cbp0&snmp-index=1curl --netrc http://device-name:port/rpc/get-interface-information/interface-name=cbp0/snmp-index=1
HTTP Accept-Header können 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/get-interface-information?interface-name=cbp0 --header "Accept: application/json"
Sie können das Ausgabeformat auch mit dem optionalen format Parameter des Junos OS RPC angeben.
Beispielsweise ruft das <get-software-information> tag-Element den Revisionsstand von Softwareprozessen ab. Die folgende HTTPS-GET-Anforderung führt diesen Befehl aus und ruft die Ergebnisse im JSON-Format ab:
https://device-name:port/rpc/get-software-information@format=json
Das folgende Python-Programm verwendet die REST-Schnittstelle, um den get-route-engine-information RPC auszuführen, extrahiert die Daten aus der Antwort und zeichnet ein Diagramm der durchschnittlichen CPU-Last. Das requests Modul überprüft automatisch die .netrc-Datei des Benutzers auf Anmeldeinformationen, die dem angegebenen Gerät zugeordnet sind. Alternativ können Sie das Argument auth=(username, password ) in die Anforderung zum Angeben von Anmeldeinformationen einschließen.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import requests
def update_line(num, data, line):
if num == 0:
return line,
global temp_y
x_data.append(num)
if num != 0 and num%8 == 1:
r = requests.get('http://' + device + '/rpc/get-route-engine-information@format=json')
if r: temp_y = r.json()['route-engine-information'][0]['route-engine'][0]['load-average-one'][0]['data']
y_data.append(float(temp_y))
line.set_data(x_data, y_data)
return line,
device = input('Enter device:port ')
temp_y = 1
fig1 = plt.figure()
x_data = []
y_data = []
l, = plt.plot([], [])
plt.xlim(0, 80)
plt.ylim(0, 1.5)
plt.xlabel('Time in seconds')
plt.ylabel('CPU utilization (load average)')
plt.title('REST-API test')
line_ani = animation.FuncAnimation(fig1, update_line, 80, fargs=(0, l), interval=1000, blit=True)
plt.show()