Enviar una solicitud POST a la API de REST
Use una solicitud HTTP POST para enviar una o varias solicitudes RPC a la API de REST. Puede utilizar la solicitud POST para configurar el dispositivo.
Para un solo rpc
comando, el formato general de los extremos es:
scheme://device-name:port/rpc/method[@attributes]/params
-
scheme
: o bienhttp
https
-
method
: el nombre de cualquier comando de Junos OSrpc
. Elmethod
nombre es idéntico al elemento de etiqueta. Para obtener más información, consulte el Explorador de API XML de Junos. -
params
: valores de parámetros opcionales (name[=value]
).
Para autenticar su solicitud, puede utilizar uno de los métodos siguientes. Recomendamos usar la netrc
opción porque es más segura.
-
Envíe el nombre de usuario y la contraseña codificados en base64 incluidos en el encabezado Autorización.
curl -u "username:password" http://device-name:port/rpc/get-interface-information
-
Como alternativa, utilice un archivo .netrc para almacenar las credenciales.
En el directorio principal del usuario, cree el archivo .netrc y especifique el nombre de host, el nombre de usuario y la contraseña del dispositivo remoto. Por ejemplo:
user@host:~$ cat ~/.netrc machine 172.16.2.1 login username password password
Asegúrese de que solo el usuario tiene permiso de lectura y escritura para el archivo.
user@host:~$ chmod 600 .netrc
En la solicitud, especifique la
--netrc
opción. Por ejemplo:user@host:~$ curl --netrc http://172.16.2.1:3000/rpc/get-interface-information
Para especificar rpc
datos como una cadena de consulta en el URI para solicitudes POST, envíe los datos de consulta en el cuerpo de POST. En tales casos, puede especificar el Content-Type
como text/plain
o application/xml
, como se muestra en estas llamadas cURL equivalentes:
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>"
Para comandos RPC únicos y múltiples, se pueden usar encabezados HTTP Accept para especificar el formato de retorno mediante uno de los siguientes valores de tipo de contenido:
-
application/xml (valor predeterminado)
-
aplicación/json
-
texto/sin formato
-
texto/html
Por ejemplo, la siguiente llamada cURL especifica un formato de salida de JSON:
curl --netrc http://device-name:port/rpc -d "<get-software-information/>" --header "Accept: application/json"
También puede especificar el formato de salida utilizando el atributo opcional format
:
curl --netrc http://device-name:port/rpc -d "<get-software-information format='json'/>"
El tipo de contenido predeterminado para las solicitudes POST que contienen argumentos en el cuerpo es application/xml. Si desea utilizar cualquier otro contenido, como una cadena de consulta, puede especificar un tipo de contenido de texto/sin formato. Especifique el atributo en los comandos de format
configuración.
Cuando se ejecutan varios rpc
comandos en una sola solicitud, el formato general del extremo es:
scheme://device-name:port/rpc
Los RPC deben proporcionarse como datos XML en el cuerpo de POST. El tipo de contenido de la respuesta es multiparte/mixto, con límite y subtipo asociados a la salida de cada ejecución de RPC. El formato especificado en el encabezado Accept se utiliza como formato de salida para cada una de las RPC si les falta un format
atributo. Si no especifica un encabezado Accept o el format
atributo en un RPC determinado, el formato de salida predeterminado es XML.
Por ejemplo, para enviar una sola solicitud HTTP para ejecutar las RPC get-software-information
y get-interface-information
, envíe una solicitud POST a /rpc
con "Auth: Basic <base64hash>"
, "Content-Type: application/xml"
. El cuerpo de POST contendría:
<get-software-information/><get-interface-information/>
Aquí hay una llamada cURL usando este cuerpo POST:
curl --netrc http://device-name:port/rpc -d "<get-software-information/><get-interface-information/>"
El resultado de la solicitud, que contiene XML como valor predeterminado, aparecerá como sigue:
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--
También puede especificar el formato de salida para cada uno de los elementos del cuerpo POST. Por ejemplo, la siguiente solicitud emite JSON para la get-interface-information
RPC y texto sin formato para la get-software-information
RPC:
curl --netrc http://device-name:port/rpc -d "<get-interface-information/><get-software-information format='text'/>" --header "Accept: application/json"
Al ejecutar varias RPC, si se produce un error, el comportamiento predeterminado es omitir el error y continuar con la ejecución. Si desea salir cuando se encuentre el primer error, especifique el stop-on-error
indicador en el URI. Por ejemplo, la siguiente solicitud configura el dispositivo y finaliza si se encuentra un error:
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/>"