Prueba de las API web con HttpRepl
El bucle HTTP read-eval-print (REPL):
- Es una herramienta de línea de comandos ligera y multiplataforma con la misma compatibilidad que .NET Core.
- Se usa para realizar solicitudes HTTP con el fin de probar las API web de ASP.NET Core (así como otras API) y ver los resultados.
- Capaz de probar las API web hospedadas en cualquier entorno, incluidos localhost y Azure App Service.
Se admiten los siguientes verbos HTTP:
Para continuar, vea o descargue la API web de muestra de ASP.NET Core (cómo descargar).
Requisitos previos
Instalación
Ejecute el siguiente comando para instalar HttpRepl:
dotnet tool install -g Microsoft.dotnet-httprepl
Se instala una herramienta global de .NET Core desde el paquete NuGet Microsoft.dotnet-httprepl.
Nota:
De manera predeterminada, la arquitectura de los binarios .NET que se van a instalar representa la arquitectura del sistema operativo que se está ejecutando en ese momento. Para especificar una arquitectura de SO diferente, consulta dotnet tool install, --arch option. Para más información, consulte la incidencia de GitHub dotnet/AspNetCore.Docs #29262.
En macOS, actualice la ruta de acceso:
export PATH="$HOME/.dotnet/tools:$PATH"
Uso
Tras la correcta instalación de la herramienta, ejecute el siguiente comando para iniciar HttpRepl:
httprepl
Para ver los comandos de HttpRepl disponibles, ejecute uno de los siguientes comandos:
httprepl -h
httprepl --help
Se muestra el siguiente resultado:
Usage:
httprepl [<BASE_ADDRESS>] [options]
Arguments:
<BASE_ADDRESS> - The initial base address for the REPL.
Options:
-h|--help - Show help information.
Once the REPL starts, these commands are valid:
Setup Commands:
Use these commands to configure the tool for your API server
connect Configures the directory structure and base address of the api server
set header Sets or clears a header for all requests. e.g. `set header content-type application/json`
HTTP Commands:
Use these commands to execute requests against your application.
GET get - Issues a GET request
POST post - Issues a POST request
PUT put - Issues a PUT request
DELETE delete - Issues a DELETE request
PATCH patch - Issues a PATCH request
HEAD head - Issues a HEAD request
OPTIONS options - Issues a OPTIONS request
Navigation Commands:
The REPL allows you to navigate your URL space and focus on specific APIs that you are working on.
ls Show all endpoints for the current path
cd Append the given directory to the currently selected path, or move up a path when using `cd ..`
Shell Commands:
Use these commands to interact with the REPL shell.
clear Removes all text from the shell
echo [on/off] Turns request echoing on or off, show the request that was made when using request commands
exit Exit the shell
REPL Customization Commands:
Use these commands to customize the REPL behavior.
pref [get/set] Allows viewing or changing preferences, e.g. 'pref set editor.command.default 'C:\\Program Files\\Microsoft VS Code\\Code.exe'`
run Runs the script at the given path. A script is a set of commands that can be typed with one command per line
ui Displays the Swagger UI page, if available, in the default browser
Use `help <COMMAND>` for more detail on an individual command. e.g. `help get`.
For detailed tool info, see https://aka.ms/http-repl-doc.
HttpRepl ofrece la finalización del comando. Al presionar la tecla Tabulador, se procesa una iteración en la lista de comandos que completa los caracteres o el punto de conexión de la API que ha escrito. En las secciones siguientes se describen los comandos disponibles de la CLI.
Conexión a la API web
Conéctese a la API web ejecutando el comando siguiente:
httprepl <ROOT URI>
<ROOT URI>
es el URI base de la API web. Por ejemplo:
httprepl https://localhost:5001
También puede ejecutar el comando siguiente en cualquier momento mientras se ejecuta HttpRepl:
connect <ROOT URI>
Por ejemplo:
(Disconnected)> connect https://localhost:5001
Elección manual de la descripción de OpenAPI para la API web
El comando de conexión anterior intentará buscar la descripción de OpenAPI automáticamente. Si por alguna razón no puede hacerlo, puede especificar el URI de la descripción de OpenAPI para la API web mediante la opción --openapi
:
connect <ROOT URI> --openapi <OPENAPI DESCRIPTION ADDRESS>
Por ejemplo:
(Disconnected)> connect https://localhost:5001 --openapi /swagger/v1/swagger.json
Habilitación de la salida detallada para obtener más información acerca de la búsqueda, el análisis y la validación de la descripción de OpenAPI
La especificación de la opción --verbose
con el comando connect
producirá más detalles cuando la herramienta busque la descripción de OpenAPI y la analice y valide.
connect <ROOT URI> --verbose
Por ejemplo:
(Disconnected)> connect https://localhost:5001 --verbose
Checking https://localhost:5001/swagger.json... 404 NotFound
Checking https://localhost:5001/swagger/v1/swagger.json... 404 NotFound
Checking https://localhost:5001/openapi.json... Found
Parsing... Successful (with warnings)
The field 'info' in 'document' object is REQUIRED [#/info]
The field 'paths' in 'document' object is REQUIRED [#/paths]
Navegación de la API web
Visualización de los puntos de conexión disponibles
Para enumerar los diferentes puntos de conexión (controladores) en la ruta de acceso actual de la dirección de la API web, ejecute el comando ls
o dir
:
https://localhost:5001/> ls
Se muestra el siguiente formato de salida:
. []
Fruits [get|post]
People [get|post]
https://localhost:5001/>
La salida anterior indica que hay dos controladores disponibles: Fruits
y People
. Ambos controladores admiten operaciones HTTP GET y POST sin parámetros.
Al navegar a un controlador específico, se revela más información. Por ejemplo, la salida del comando siguiente muestra que el controlador Fruits
también admite las operaciones HTTP GET, PUT y DELETE. Cada una de estas operaciones esperan un parámetro id
en la ruta:
https://localhost:5001/fruits> ls
. [get|post]
.. []
{id} [get|put|delete]
https://localhost:5001/fruits>
También puede ejecutar el comando ui
para abrir la página de la interfaz de usuario de Swagger de la API web en un explorador. Por ejemplo:
https://localhost:5001/> ui
Navegación a un punto de conexión
Para navegar a un punto de conexión distinto en la API web, ejecute el comando cd
:
https://localhost:5001/> cd people
La ruta de acceso que sigue al comando cd
no distingue mayúsculas de minúsculas. Se muestra el siguiente formato de salida:
/people [get|post]
https://localhost:5001/people>
Personalización de HttpRepl
Los colores predeterminados de HttpRepl se pueden personalizar. Además, se puede definir un editor de texto predeterminado. Las preferencias de HttpRepl se conservan tanto en la sesión actual como en futuras sesiones. Una vez modificadas, se almacenan en el archivo siguiente:
El archivo .httpreplprefs se carga al inicio; los cambios no se supervisan durante el tiempo en ejecución. Las modificaciones manuales que se hagan en el archivo solo se aplicarán después de reiniciar la herramienta.
Visualización de la configuración
Para ver la configuración disponible, ejecute el comando pref get
. Por ejemplo:
https://localhost:5001/> pref get
El comando anterior muestra los pares clave-valor disponibles:
colors.json=Green
colors.json.arrayBrace=BoldCyan
colors.json.comma=BoldYellow
colors.json.name=BoldMagenta
colors.json.nameSeparator=BoldWhite
colors.json.objectBrace=Cyan
colors.protocol=BoldGreen
colors.status=BoldYellow
Establecimiento de las preferencias de color
Actualmente solo se permite colorear la respuesta para JSON. Para personalizar el color predeterminado de la herramienta HttpRepl, busque la clave correspondiente al color que se va a cambiar. Para obtener instrucciones sobre cómo buscar las claves, consulte la sección Visualización de la configuración. Por ejemplo, cambie el valor de clave colors.json
de Green
a White
, tal como se indica a continuación:
https://localhost:5001/people> pref set colors.json White
Solo se pueden usar los colores permitidos. Las solicitudes HTTP posteriores muestran la salida con el nuevo color.
Si no se establecen claves de color específicas, se consideran las más genéricas. Para mostrar este comportamiento de reserva, veamos el ejemplo siguiente:
- Si
colors.json.name
no tiene ningún valor, se usacolors.json.string
. - Si
colors.json.string
no tiene ningún valor, se usacolors.json.literal
. - Si
colors.json.literal
no tiene ningún valor, se usacolors.json
. - Si
colors.json
no tiene ningún valor, se usa el color de texto predeterminado del shell del comando (AllowedColors.None
).
Establecimiento del tamaño de sangría
Actualmente, la personalización del tamaño de sangría de respuesta solo se admite para JSON. El tamaño predeterminado es de dos espacios. Por ejemplo:
[
{
"id": 1,
"name": "Apple"
},
{
"id": 2,
"name": "Orange"
},
{
"id": 3,
"name": "Strawberry"
}
]
Para cambiar el tamaño predeterminado, establezca la clave formatting.json.indentSize
. Por ejemplo, para usar siempre cuatro espacios:
pref set formatting.json.indentSize 4
Las respuestas posteriores respetan el valor de cuatro espacios:
[
{
"id": 1,
"name": "Apple"
},
{
"id": 2,
"name": "Orange"
},
{
"id": 3,
"name": "Strawberry"
}
]
Establecimiento del editor de texto predeterminado
De manera predeterminada, HttpRepl no tiene ningún editor de texto configurado para su uso. Para probar los métodos de la API web que requieren un cuerpo de la solicitud HTTP, se debe establecer un editor de texto predeterminado. La herramienta HttpRepl inicia el editor de texto configurado con el único fin de redactar el cuerpo de la solicitud. Ejecute el comando siguiente para establecer el editor de texto preferido como predeterminado:
pref set editor.command.default "<EXECUTABLE>"
En el comando anterior, <EXECUTABLE>
es la ruta de acceso completa al archivo ejecutable del editor de texto. Por ejemplo, ejecute el comando siguiente para establecer Visual Studio Code como editor de texto predeterminado:
Para iniciar el editor de texto predeterminado con argumentos específicos de la CLI, establezca la clave editor.command.default.arguments
. Por ejemplo, supongamos que Visual Studio Code es el editor de texto predeterminado y que siempre quiere que HttpRepl abra Visual Studio Code en una nueva sesión con las extensiones deshabilitadas. Ejecute el siguiente comando:
pref set editor.command.default.arguments "--disable-extensions --new-window"
Sugerencia
Si su editor predeterminado es Visual Studio Code, normalmente querrá pasar el argumento -w
o --wait
para hacer que Visual Studio Code le espere para cerrar el archivo antes de volver.
Establecimiento de las rutas de acceso de búsqueda de la descripción de OpenAPI
De forma predeterminada, HttpRepl tiene un conjunto de rutas de acceso relativas que usa para buscar la descripción de OpenAPI al ejecutar el comando connect
sin la opción --openapi
. Estas rutas de acceso relativas se combinan con las rutas de acceso raíz y base especificadas en el comando connect
. Las rutas de acceso relativas predeterminadas son:
swagger.json
swagger/v1/swagger.json
/swagger.json
/swagger/v1/swagger.json
openapi.json
/openapi.json
Para usar un conjunto diferente de rutas de acceso de búsqueda en el entorno, establezca la preferencia swagger.searchPaths
. El valor debe ser una lista delimitada por canalizaciones de rutas de acceso relativas. Por ejemplo:
pref set swagger.searchPaths "swagger/v2/swagger.json|swagger/v3/swagger.json"
En lugar de reemplazar la lista predeterminada por completo, la lista también se puede modificar agregando o quitando rutas de acceso.
Para agregar una o varias rutas de acceso de búsqueda a la lista predeterminada, establezca la preferencia swagger.addToSearchPaths
. El valor debe ser una lista delimitada por canalizaciones de rutas de acceso relativas. Por ejemplo:
pref set swagger.addToSearchPaths "openapi/v2/openapi.json|openapi/v3/openapi.json"
Para quitar una o varias rutas de acceso de búsqueda de la lista predeterminada, establezca la preferencia swagger.addToSearchPaths
. El valor debe ser una lista delimitada por canalizaciones de rutas de acceso relativas. Por ejemplo:
pref set swagger.removeFromSearchPaths "swagger.json|/swagger.json"
Prueba de solicitudes HTTP GET
Sinopsis
get <PARAMETER> [-F|--no-formatting] [-h|--header] [--response:body] [--response:headers] [-s|--streaming]
Argumentos
PARAMETER
Se trata del parámetro de ruta, si existe, que espera el método de acción del controlador asociado.
Opciones
Las siguientes opciones están disponibles para el comando get
:
-F|--no-formatting
Marca cuya presencia suprime el formato de respuesta HTTP.
-h|--header
Establece un encabezado de solicitud HTTP. Se admiten los dos siguientes formatos de valor:
{header}={value}
{header}:{value}
--response:body
Especifica un archivo en el que se debe escribir el cuerpo de respuesta HTTP. Por ejemplo,
--response:body "C:\response.json"
. Si el archivo no existe, se creará.--response:headers
Especifica un archivo en el que se deben escribir los encabezados de respuesta HTTP. Por ejemplo,
--response:headers "C:\response.txt"
. Si el archivo no existe, se creará.-s|--streaming
Marca cuya presencia habilita la transmisión en secuencias de la respuesta HTTP.
Ejemplo
Para emitir una solicitud HTTP GET realice lo siguiente:
Ejecute el comando
get
en un punto de conexión que lo admita:https://localhost:5001/people> get
El comando anterior muestra el siguiente formato de salida:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 21 Jun 2019 03:38:45 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "name": "Scott Hunter" }, { "id": 2, "name": "Scott Hanselman" }, { "id": 3, "name": "Scott Guthrie" } ] https://localhost:5001/people>
Recupere un registro específico pasando un parámetro al comando
get
:https://localhost:5001/people> get 2
El comando anterior muestra el siguiente formato de salida:
HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 21 Jun 2019 06:17:57 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 2, "name": "Scott Hanselman" } ] https://localhost:5001/people>
Prueba de solicitudes HTTP POST
Sinopsis
post <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumentos
PARAMETER
Se trata del parámetro de ruta, si existe, que espera el método de acción del controlador asociado.
Opciones
-F|--no-formatting
Marca cuya presencia suprime el formato de respuesta HTTP.
-h|--header
Establece un encabezado de solicitud HTTP. Se admiten los dos siguientes formatos de valor:
{header}={value}
{header}:{value}
--response:body
Especifica un archivo en el que se debe escribir el cuerpo de respuesta HTTP. Por ejemplo,
--response:body "C:\response.json"
. Si el archivo no existe, se creará.--response:headers
Especifica un archivo en el que se deben escribir los encabezados de respuesta HTTP. Por ejemplo,
--response:headers "C:\response.txt"
. Si el archivo no existe, se creará.-s|--streaming
Marca cuya presencia habilita la transmisión en secuencias de la respuesta HTTP.
-c|--content
Proporciona un cuerpo de la solicitud HTTP en línea. Por ejemplo,
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Proporciona una ruta de acceso a un archivo que contiene el cuerpo de la solicitud HTTP. Por ejemplo,
-f "C:\request.json"
.--no-body
Indica que no se necesita ningún cuerpo de la solicitud HTTP.
Ejemplo
Para emitir una solicitud HTTP POST, realice lo siguiente:
Ejecute el comando
post
en un punto de conexión que lo admita:https://localhost:5001/people> post -h Content-Type=application/json
En el comando anterior, el encabezado de solicitud HTTP
Content-Type
se establece para indicar un tipo de medios de cuerpo de la solicitud de JSON. El editor de texto predeterminado abre un archivo .tmp con una plantilla JSON que representa el cuerpo de la solicitud HTTP. Por ejemplo:{ "id": 0, "name": "" }
Sugerencia
Para establecer el editor de texto predeterminado, consulte la sección Establecimiento del editor de texto predeterminado.
Modifique la plantilla JSON para cumplir los requisitos de validación de modelos:
{ "id": 0, "name": "Scott Addie" }
Guarde el archivo .tmp y cierre el editor de texto. En el shell del comando aparecerá la salida siguiente:
HTTP/1.1 201 Created Content-Type: application/json; charset=utf-8 Date: Thu, 27 Jun 2019 21:24:18 GMT Location: https://localhost:5001/people/4 Server: Kestrel Transfer-Encoding: chunked { "id": 4, "name": "Scott Addie" } https://localhost:5001/people>
Prueba de solicitudes HTTP PUT
Sinopsis
put <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumentos
PARAMETER
Se trata del parámetro de ruta, si existe, que espera el método de acción del controlador asociado.
Opciones
-F|--no-formatting
Marca cuya presencia suprime el formato de respuesta HTTP.
-h|--header
Establece un encabezado de solicitud HTTP. Se admiten los dos siguientes formatos de valor:
{header}={value}
{header}:{value}
--response:body
Especifica un archivo en el que se debe escribir el cuerpo de respuesta HTTP. Por ejemplo,
--response:body "C:\response.json"
. Si el archivo no existe, se creará.--response:headers
Especifica un archivo en el que se deben escribir los encabezados de respuesta HTTP. Por ejemplo,
--response:headers "C:\response.txt"
. Si el archivo no existe, se creará.-s|--streaming
Marca cuya presencia habilita la transmisión en secuencias de la respuesta HTTP.
-c|--content
Proporciona un cuerpo de la solicitud HTTP en línea. Por ejemplo,
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Proporciona una ruta de acceso a un archivo que contiene el cuerpo de la solicitud HTTP. Por ejemplo,
-f "C:\request.json"
.--no-body
Indica que no se necesita ningún cuerpo de la solicitud HTTP.
Ejemplo
Para emitir una solicitud HTTP PUT, realice lo siguiente:
Opcional: Ejecute el comando
get
para ver los datos antes de modificarlos:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:07:32 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 2, "data": "Orange" }, { "id": 3, "data": "Strawberry" } ]
Ejecute el comando
put
en un punto de conexión que lo admita:https://localhost:5001/fruits> put 2 -h Content-Type=application/json
En el comando anterior, el encabezado de solicitud HTTP
Content-Type
se establece para indicar un tipo de medios de cuerpo de la solicitud de JSON. El editor de texto predeterminado abre un archivo .tmp con una plantilla JSON que representa el cuerpo de la solicitud HTTP. Por ejemplo:{ "id": 0, "name": "" }
Sugerencia
Para establecer el editor de texto predeterminado, consulte la sección Establecimiento del editor de texto predeterminado.
Modifique la plantilla JSON para cumplir los requisitos de validación de modelos:
{ "id": 2, "name": "Cherry" }
Guarde el archivo .tmp y cierre el editor de texto. En el shell del comando aparecerá la salida siguiente:
[main 2019-06-28T17:27:01.805Z] update#setState idle HTTP/1.1 204 No Content Date: Fri, 28 Jun 2019 17:28:21 GMT Server: Kestrel
Opcional: Emita un comando
get
para ver las modificaciones. Por ejemplo, si ha escrito "Cherry" en el editor de texto, un elementoget
devuelve el siguiente resultado:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:08:20 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 2, "data": "Cherry" }, { "id": 3, "data": "Strawberry" } ] https://localhost:5001/fruits>
Prueba de solicitudes HTTP DELETE
Sinopsis
delete <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumentos
PARAMETER
Se trata del parámetro de ruta, si existe, que espera el método de acción del controlador asociado.
Opciones
-F|--no-formatting
Marca cuya presencia suprime el formato de respuesta HTTP.
-h|--header
Establece un encabezado de solicitud HTTP. Se admiten los dos siguientes formatos de valor:
{header}={value}
{header}:{value}
--response:body
Especifica un archivo en el que se debe escribir el cuerpo de respuesta HTTP. Por ejemplo,
--response:body "C:\response.json"
. Si el archivo no existe, se creará.--response:headers
Especifica un archivo en el que se deben escribir los encabezados de respuesta HTTP. Por ejemplo,
--response:headers "C:\response.txt"
. Si el archivo no existe, se creará.-s|--streaming
Marca cuya presencia habilita la transmisión en secuencias de la respuesta HTTP.
Ejemplo
Para emitir una solicitud HTTP DELETE, realice lo siguiente:
Opcional: Ejecute el comando
get
para ver los datos antes de modificarlos:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:07:32 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 2, "data": "Orange" }, { "id": 3, "data": "Strawberry" } ]
Ejecute el comando
delete
en un punto de conexión que lo admita:https://localhost:5001/fruits> delete 2
El comando anterior muestra el siguiente formato de salida:
HTTP/1.1 204 No Content Date: Fri, 28 Jun 2019 17:36:42 GMT Server: Kestrel
Opcional: Emita un comando
get
para ver las modificaciones. En este ejemplo, un elementoget
devuelve el siguiente resultado:https://localhost:5001/fruits> get HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Sat, 22 Jun 2019 00:16:30 GMT Server: Kestrel Transfer-Encoding: chunked [ { "id": 1, "data": "Apple" }, { "id": 3, "data": "Strawberry" } ] https://localhost:5001/fruits>
Prueba de solicitudes HTTP PATCH
Sinopsis
patch <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumentos
PARAMETER
Se trata del parámetro de ruta, si existe, que espera el método de acción del controlador asociado.
Opciones
-F|--no-formatting
Marca cuya presencia suprime el formato de respuesta HTTP.
-h|--header
Establece un encabezado de solicitud HTTP. Se admiten los dos siguientes formatos de valor:
{header}={value}
{header}:{value}
--response:body
Especifica un archivo en el que se debe escribir el cuerpo de respuesta HTTP. Por ejemplo,
--response:body "C:\response.json"
. Si el archivo no existe, se creará.--response:headers
Especifica un archivo en el que se deben escribir los encabezados de respuesta HTTP. Por ejemplo,
--response:headers "C:\response.txt"
. Si el archivo no existe, se creará.-s|--streaming
Marca cuya presencia habilita la transmisión en secuencias de la respuesta HTTP.
-c|--content
Proporciona un cuerpo de la solicitud HTTP en línea. Por ejemplo,
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Proporciona una ruta de acceso a un archivo que contiene el cuerpo de la solicitud HTTP. Por ejemplo,
-f "C:\request.json"
.--no-body
Indica que no se necesita ningún cuerpo de la solicitud HTTP.
Prueba de solicitudes HTTP HEAD
Sinopsis
head <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumentos
PARAMETER
Se trata del parámetro de ruta, si existe, que espera el método de acción del controlador asociado.
Opciones
-F|--no-formatting
Marca cuya presencia suprime el formato de respuesta HTTP.
-h|--header
Establece un encabezado de solicitud HTTP. Se admiten los dos siguientes formatos de valor:
{header}={value}
{header}:{value}
--response:body
Especifica un archivo en el que se debe escribir el cuerpo de respuesta HTTP. Por ejemplo,
--response:body "C:\response.json"
. Si el archivo no existe, se creará.--response:headers
Especifica un archivo en el que se deben escribir los encabezados de respuesta HTTP. Por ejemplo,
--response:headers "C:\response.txt"
. Si el archivo no existe, se creará.-s|--streaming
Marca cuya presencia habilita la transmisión en secuencias de la respuesta HTTP.
Prueba de solicitudes HTTP OPTIONS
Sinopsis
options <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Argumentos
PARAMETER
Se trata del parámetro de ruta, si existe, que espera el método de acción del controlador asociado.
Opciones
-F|--no-formatting
Marca cuya presencia suprime el formato de respuesta HTTP.
-h|--header
Establece un encabezado de solicitud HTTP. Se admiten los dos siguientes formatos de valor:
{header}={value}
{header}:{value}
--response:body
Especifica un archivo en el que se debe escribir el cuerpo de respuesta HTTP. Por ejemplo,
--response:body "C:\response.json"
. Si el archivo no existe, se creará.--response:headers
Especifica un archivo en el que se deben escribir los encabezados de respuesta HTTP. Por ejemplo,
--response:headers "C:\response.txt"
. Si el archivo no existe, se creará.-s|--streaming
Marca cuya presencia habilita la transmisión en secuencias de la respuesta HTTP.
Establecimiento de encabezados de solicitudes HTTP
Para establecer un encabezado de solicitud HTTP, use uno de los métodos siguientes:
Establézcalo insertado con la solicitud HTTP. Por ejemplo:
https://localhost:5001/people> post -h Content-Type=application/json
Con el método anterior, cada encabezado de solicitud HTTP distinto requiere su propia opción
-h
.Establézcalo antes de enviar la solicitud HTTP. Por ejemplo:
https://localhost:5001/people> set header Content-Type application/json
Al establecer el encabezado antes de enviar una solicitud, este permanece establecido mientras dure la sesión de shell de comandos. Para borrar el encabezado, proporcione un valor vacío. Por ejemplo:
https://localhost:5001/people> set header Content-Type
Prueba de los puntos de conexión seguros
HttpRepl admite las pruebas de puntos de conexión protegidos de las siguientes formas:
- A través de las credenciales predeterminadas del usuario que ha iniciado sesión.
- A través del uso de encabezados de solicitud HTTP.
Credenciales predeterminadas
Considere una API web que esté probando y que se hospede en IIS y esté protegida con la autenticación de Windows. Quiere que las credenciales del usuario que ejecutan la herramienta fluyan a través de los puntos de conexión HTTP en proceso de prueba. Para pasar las credenciales predeterminadas del usuario que ha iniciado sesión:
Establezca la preferencia
httpClient.useDefaultCredentials
entrue
:pref set httpClient.useDefaultCredentials true
Salga de la herramienta y reiníciela antes de enviar otra solicitud a la API web.
Credenciales del proxy predeterminadas
Considere un escenario en el que la API web que está probando está detrás de un proxy protegido con la autenticación de Windows. Quiere que las credenciales del usuario que ejecutan la herramienta fluyan al proxy. Para pasar las credenciales predeterminadas del usuario que ha iniciado sesión:
Establezca la preferencia
httpClient.proxy.useDefaultCredentials
entrue
:pref set httpClient.proxy.useDefaultCredentials true
Salga de la herramienta y reiníciela antes de enviar otra solicitud a la API web.
Encabezados de solicitud HTTP
Entre los ejemplos de esquemas de autenticación y autorización admitidos se incluyen los siguientes:
- basic authentication
- Tokens de portador de JWT
- autenticación de síntesis del mensaje
Por ejemplo, puede enviar un token de portador a un punto de conexión con el comando siguiente:
set header Authorization "bearer <TOKEN VALUE>"
Para acceder un punto de conexión hospedado por Azure o para usar la API REST de Azure, necesitará un token de portador. Use los pasos siguientes para obtener un token de portador para la suscripción de Azure a través de la CLI de Azure. HttpRepl establece el token de portador en un encabezado de solicitud HTTP. Se recupera una lista de Azure App Service Web Apps.
Inicie de sesión en Azure:
az login
Obtenga el identificador de suscripción con el comando siguiente:
az account show --query id
Copie el identificador de suscripción y ejecute el comando siguiente:
az account set --subscription "<SUBSCRIPTION ID>"
Obtenga el token de portador con el comando siguiente:
az account get-access-token --query accessToken
Conéctese a la API REST de Azure con HttpRepl:
httprepl https://management.azure.com
Establezca el encabezado de solicitud HTTP
Authorization
:https://management.azure.com/> set header Authorization "bearer <ACCESS TOKEN>"
Vaya a la suscripción:
https://management.azure.com/> cd subscriptions/<SUBSCRIPTION ID>
Obtenga una lista de las instancias de Azure App Service Web Apps de su suscripción:
https://management.azure.com/subscriptions/{SUBSCRIPTION ID}> get providers/Microsoft.Web/sites?api-version=2016-08-01
Se muestra la respuesta siguiente:
HTTP/1.1 200 OK Cache-Control: no-cache Content-Length: 35948 Content-Type: application/json; charset=utf-8 Date: Thu, 19 Sep 2019 23:04:03 GMT Expires: -1 Pragma: no-cache Strict-Transport-Security: max-age=31536000; includeSubDomains X-Content-Type-Options: nosniff x-ms-correlation-request-id: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em> x-ms-original-request-ids: <em>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</em> x-ms-ratelimit-remaining-subscription-reads: 11999 x-ms-request-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx x-ms-routing-request-id: WESTUS:xxxxxxxxxxxxxxxx:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx { "value": [ <AZURE RESOURCES LIST> ] }
Alternancia de la pantalla de solicitud HTTP
De manera predeterminada, se suprime la pantalla de solicitud HTTP que se está enviando. Es posible cambiar la configuración correspondiente mientras dure la sesión de shell de comandos.
Habilitación de la pantalla de solicitudes
Vea la solicitud HTTP que se envía mediante la ejecución del comando echo on
. Por ejemplo:
https://localhost:5001/people> echo on
Request echoing is on
Las solicitudes HTTP posteriores de la sesión actual muestran los encabezados de la solicitud. Por ejemplo:
https://localhost:5001/people> post
[main 2019-06-28T18:50:11.930Z] update#setState idle
Request to https://localhost:5001...
POST /people HTTP/1.1
Content-Length: 41
Content-Type: application/json
User-Agent: HTTP-REPL
{
"id": 0,
"name": "Scott Addie"
}
Response from https://localhost:5001...
HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
Date: Fri, 28 Jun 2019 18:50:21 GMT
Location: https://localhost:5001/people/4
Server: Kestrel
Transfer-Encoding: chunked
{
"id": 4,
"name": "Scott Addie"
}
https://localhost:5001/people>
Deshabilitación de la pantalla de solicitudes
Suprima la pantalla de solicitud HTTP que se envía mediante la ejecución del comando echo off
. Por ejemplo:
https://localhost:5001/people> echo off
Request echoing is off
Ejecutar un script
Si ejecuta con frecuencia el mismo conjunto de comandos de HttpRepl, considere la posibilidad de almacenarlos en un archivo de texto. Los comandos del archivo toman el mismo formulario que los ejecutados manualmente en la línea de comandos. Los comandos se pueden ejecutar en un modo por lotes mediante el comando run
. Por ejemplo:
Cree un archivo de texto que contenga un conjunto de comandos delimitados por línea nueva. Para ilustrarlo, considere la posibilidad de usar un archivo people-script.txt que contenga los comandos siguientes:
set base https://localhost:5001 ls cd People ls get 1
Ejecute el comando
run
, pasando la ruta de acceso del archivo de texto. Por ejemplo:https://localhost:5001/> run C:\http-repl-scripts\people-script.txt
Se mostrará la siguiente salida:
https://localhost:5001/> set base https://localhost:5001 Using OpenAPI description at https://localhost:5001/swagger/v1/swagger.json https://localhost:5001/> ls . [] Fruits [get|post] People [get|post] https://localhost:5001/> cd People /People [get|post] https://localhost:5001/People> ls . [get|post] .. [] {id} [get|put|delete] https://localhost:5001/People> get 1 HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 Date: Fri, 12 Jul 2019 19:20:10 GMT Server: Kestrel Transfer-Encoding: chunked { "id": 1, "name": "Scott Hunter" } https://localhost:5001/People>
Borrado de la salida
Para quitar todas las salidas escritas en el shell de comandos mediante la herramienta HttpRepl, ejecute el comando clear
o cls
. Para ilustrarlo, imagine que el shell de comandos contiene la salida siguiente:
httprepl https://localhost:5001
(Disconnected)> set base "https://localhost:5001"
Using OpenAPI description at https://localhost:5001/swagger/v1/swagger.json
https://localhost:5001/> ls
. []
Fruits [get|post]
People [get|post]
https://localhost:5001/>
Ejecute el comando siguiente para borrar la salida:
https://localhost:5001/> clear
Después de ejecutar el comando anterior, el shell de comandos solo contiene la salida siguiente:
https://localhost:5001/>