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, consulte 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]

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

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:

%HOME%/.httpreplprefs

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 usa colors.json.string.
  • Si colors.json.string no tiene ningún valor, se usa colors.json.literal.
  • Si colors.json.literal no tiene ningún valor, se usa colors.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:

pref set editor.command.default "/usr/bin/code"

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:

  1. 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>
    
  2. 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:

  1. 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.

  2. Modifique la plantilla JSON para cumplir los requisitos de validación de modelos:

    {
      "id": 0,
      "name": "Scott Addie"
    }
    
  3. 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:

  1. 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"
      }
    ]
    
  2. 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.

  3. Modifique la plantilla JSON para cumplir los requisitos de validación de modelos:

    {
      "id": 2,
      "name": "Cherry"
    }
    
  4. 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
    
  5. Opcional: Emita un comando get para ver las modificaciones. Por ejemplo, si ha escrito "Cherry" en el editor de texto, un elemento get 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:

  1. 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"
      }
    ]
    
  2. 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
    
  3. Opcional: Emita un comando get para ver las modificaciones. En este ejemplo, un elemento get 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:

  1. Establezca la preferencia httpClient.useDefaultCredentials en true:

    pref set httpClient.useDefaultCredentials true
    
  2. 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:

  1. Establezca la preferencia httpClient.proxy.useDefaultCredentials en true:

    pref set httpClient.proxy.useDefaultCredentials true
    
  2. 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.

  1. Inicie de sesión en Azure:

    az login
    
  2. Obtenga el identificador de suscripción con el comando siguiente:

    az account show --query id
    
  3. Copie el identificador de suscripción y ejecute el comando siguiente:

    az account set --subscription "<SUBSCRIPTION ID>"
    
  4. Obtenga el token de portador con el comando siguiente:

    az account get-access-token --query accessToken
    
  5. Conéctese a la API REST de Azure con HttpRepl:

    httprepl https://management.azure.com
    
  6. Establezca el encabezado de solicitud HTTP Authorization:

    https://management.azure.com/> set header Authorization "bearer <ACCESS TOKEN>"
    
  7. Vaya a la suscripción:

    https://management.azure.com/> cd subscriptions/<SUBSCRIPTION ID>
    
  8. 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:

  1. 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
    
  2. 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/>

Recursos adicionales