Enviar uma solicitação POST à REST API
Use uma solicitação DE POST HTTP para enviar solicitações de RPC individuais ou múltiplas à REST API. Você pode usar a solicitação POST para configurar o dispositivo.
Para um único rpc
comando, o formato geral dos endpoints é:
scheme://device-name:port/rpc/method[@attributes]/params
-
scheme
:http
ouhttps
-
method
: O nome de qualquer comando junos OSrpc
. Omethod
nome é idêntico ao elemento tag. Para obter mais informações, veja o Junos XML API Explorer. -
params
: Valores de parâmetro opcionais (name[=value]
).
Para autenticar sua solicitação, você pode usar um dos seguintes métodos. Recomendamos usar a opção netrc
porque ela é mais segura.
-
Envie o nome de usuário e a senha com código base64 incluídos no cabeçalho de autorização.
curl -u "username:password" http://device-name:port/rpc/get-interface-information
-
Alternativamente, use um arquivo .netrc para armazenar as credenciais.
No diretório de casa do usuário, crie o arquivo .netrc e especifique o nome de host, nome de usuário e senha para o dispositivo remoto. Por exemplo:
user@host:~$ cat ~/.netrc machine 172.16.2.1 login username password password
Certifique-se de que apenas o usuário tenha lido e escreva permissão para o arquivo.
user@host:~$ chmod 600 .netrc
Na solicitação, especifique a opção
--netrc
. Por exemplo:user@host:~$ curl --netrc http://172.16.2.1:3000/rpc/get-interface-information
Para especificar rpc
dados como uma string de consulta na URI para solicitações post, envie os dados de consulta no órgão POST. Nesses casos, você pode especificar o Content-Type
como text/plain
ou application/xml
, conforme mostrado nestas chamadas 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 e múltiplos, os cabeçalhos HTTP Accept podem ser usados para especificar o formato de devolução usando um dos seguintes valores do tipo de conteúdo:
-
aplicativo/xml (o padrão)
-
aplicativo/json
-
texto/simples
-
texto/html
Por exemplo, a chamada cURL a seguir especifica um formato de saída do JSON:
curl --netrc http://device-name:port/rpc -d "<get-software-information/>" --header "Accept: application/json"
Você também pode especificar o formato de saída usando o atributo opcional format
:
curl --netrc http://device-name:port/rpc -d "<get-software-information format='json'/>"
O tipo de conteúdo padrão para solicitações POST que contêm argumentos no corpo é aplicativo/xml. Se você quiser usar qualquer outro conteúdo, como uma string de consulta, você pode especificar um tipo de conteúdo de texto/simples. Especifique o format
atributo nos comandos de configuração.
Ao executar vários rpc
comandos em uma única solicitação, o formato geral do endpoint é:
scheme://device-name:port/rpc
Os RPCs devem ser fornecidos como dados XML no corpo POST. O tipo de conteúdo para a resposta é multipart/misto, com limite e subtipo associados à saída de cada execução de RPC. O formato especificado no cabeçalho Aceite é usado como formato de saída para cada um dos RPCs se eles estiverem faltando um format
atributo. Se você não especificar um cabeçalho aceitar ou o format
atributo em um determinado RPC, o formato de saída padrão é XML.
Por exemplo, enviar uma única solicitação de HTTP para executar os RPCs get-software-information
e get-interface-information
enviar uma solicitação post com"Auth: Basic <base64hash>"
, . "Content-Type: application/xml"
/rpc
O corpo post conteria:
<get-software-information/><get-interface-information/>
Aqui está uma chamada de cURL usando este corpo POST:
curl --netrc http://device-name:port/rpc -d "<get-software-information/><get-interface-information/>"
A saída da solicitação, contendo XML como padrão, apareceria da seguinte forma:
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--
Você também pode especificar o formato de saída para cada um dos elementos no corpo POST. Por exemplo, a solicitação a seguir emite json para o get-interface-information
RPC e texto simples para o get-software-information
RPC:
curl --netrc http://device-name:port/rpc -d "<get-interface-information/><get-software-information format='text'/>" --header "Accept: application/json"
Ao executar vários RPCs, se ocorrer um erro, o comportamento padrão é ignorar o erro e continuar a execução. Se você quiser sair quando o primeiro erro for encontrado, especifique a stop-on-error
bandeira na URI. Por exemplo, a solicitação a seguir configura o dispositivo e termina se um erro for encontrado:
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/>"