Partilhar via


Teste APIs da Web com o HttpRepl

O HTTP Read-Eval-Print Loop (REPL) é:

  • Uma ferramenta de linha de comando leve e multiplataforma que é suportada em todos os lugares em que o .NET é suportado.
  • Usado para fazer solicitações HTTP para testar APIs da Web ASP.NET Core (e APIs da Web non-ASP.NET Core) e exibir seus resultados.
  • Capaz de testar APIs Web hospedadas em qualquer ambiente, incluindo localhost e Serviço de Aplicativo do Azure.

Os seguintes verbos HTTP são suportados:

Para acompanhar, visualize ou baixe o exemplo ASP.NET API Web Core (como fazer o download).

Prerequisites

Installation

Para instalar o HttpRepl, execute o seguinte comando:

dotnet tool install -g Microsoft.dotnet-httprepl

Uma ferramenta global do .NET é instalada a partir do pacote NuGet Microsoft.dotnet-httprepl .

Note

Por padrão, a arquitetura dos binários do .NET a serem instalados representa a arquitetura do sistema operacional em execução no momento. Para especificar uma arquitetura de sistema operativo diferente, consulte dotnet tool install, opção --arch. Para obter mais informações, consulte o issue do GitHub dotnet/AspNetCore.Docs #29262.

No macOS, atualize o caminho:

export PATH="$HOME/.dotnet/tools:$PATH"

Usage

Após a instalação bem-sucedida da ferramenta, execute o seguinte comando para iniciar o HttpRepl:

httprepl

Para exibir os comandos HttpRepl disponíveis, execute um dos seguintes comandos:

httprepl -h
httprepl --help

A seguinte saída é exibida:

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.

O HttpRepl oferece conclusão de comando. Pressionar a tecla Tab percorre a lista de comandos que completam os caracteres ou o endpoint da API que introduziste. As seções a seguir descrevem os comandos disponíveis da CLI.

Conectar-se à API da Web

Conecte-se a uma API da Web executando o seguinte comando:

httprepl <ROOT URI>

<ROOT URI> é o URI base para a API da Web. Por exemplo:

httprepl https://localhost:5001

Como alternativa, execute o seguinte comando a qualquer momento enquanto o HttpRepl estiver em execução:

connect <ROOT URI>

Por exemplo:

(Disconnected)> connect https://localhost:5001

Aponte manualmente para a descrição da OpenAPI para a API da Web

O comando connect acima tentará encontrar a descrição da OpenAPI automaticamente. Se, por algum motivo, não for possível fazer isso, você pode especificar o URI da descrição da OpenAPI para a API da Web usando a --openapi opção:

connect <ROOT URI> --openapi <OPENAPI DESCRIPTION ADDRESS>

Por exemplo:

(Disconnected)> connect https://localhost:5001 --openapi /swagger/v1/swagger.json

Habilite a saída detalhada para obter detalhes sobre a pesquisa, análise e validação de descrições da OpenAPI

Especificar a --verbose opção com o connect comando produzirá mais detalhes quando a ferramenta procurar a descrição da OpenAPI, analisá-la e validá-la.

connect <ROOT URI> --verbose

Por exemplo:

(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]

Ver pontos finais disponíveis

Para listar os diferentes pontos de extremidade (controladores) no caminho atual do endereço da API da Web, execute o comando ls ou dir:

https://localhost:5001/> ls

O seguinte formato de saída é exibido:

.        []
Fruits   [get|post]
People   [get|post]

https://localhost:5001/>

A saída anterior indica que há dois controladores disponíveis: Fruits e People. Ambos os controladores suportam operações HTTP GET e POST sem parâmetros.

Navegar em um controlador específico revela mais detalhes. Por exemplo, a saída do comando a seguir mostra que o Fruits controlador também suporta operações HTTP GET, PUT e DELETE. Cada uma dessas operações espera um id parâmetro na rota:

https://localhost:5001/fruits> ls
.      [get|post]
..     []
{id}   [get|put|delete]

https://localhost:5001/fruits>

Como alternativa, execute o ui comando para abrir a página da interface do usuário Swagger da API da Web em um navegador. Por exemplo:

https://localhost:5001/> ui

Para navegar até um ponto de extremidade diferente na API da Web, execute o cd comando:

https://localhost:5001/> cd people

O caminho que segue o comando cd não distingue maiúsculas de minúsculas. O seguinte formato de saída é exibido:

/people    [get|post]

https://localhost:5001/people>

Personalizar o HttpRepl

As cores padrão do HttpRepl podem ser personalizadas. Além disso, um editor de texto padrão pode ser definido. As preferências do HttpRepl são guardadas na sessão atual e mantidas em sessões futuras. Uma vez modificadas, as preferências são armazenadas no seguinte arquivo:

%HOME%/.httpreplprefs

O arquivo .httpreplprefs é carregado na inicialização e não monitorado para alterações em tempo de execução. Modificações manuais no arquivo entram em vigor somente depois de reiniciar a ferramenta.

Ver as definições

Para visualizar as configurações disponíveis, execute o pref get comando. Por exemplo:

https://localhost:5001/> pref get

O comando anterior exibe os pares chave-valor disponíveis:

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

Definir preferências de cor

Atualmente, a colorização da resposta é suportada apenas para JSON. Para personalizar a coloração padrão da ferramenta HttpRepl, localize a chave correspondente à cor a ser alterada. Para obter instruções sobre como encontrar as chaves, consulte a seção Exibir as configurações . Por exemplo, altere o valor da chave de colors.json para Green.

https://localhost:5001/people> pref set colors.json White

Apenas as cores permitidas podem ser usadas. As solicitações HTTP subsequentes exibem a saída com a nova coloração.

Quando chaves de cores específicas não são definidas, chaves mais genéricas são consideradas. Para demonstrar esse comportamento de fallback, considere o seguinte exemplo:

  • Se colors.json.name não tiver um valor, colors.json.string é usado.
  • Se colors.json.string não tiver um valor, colors.json.literal é usado.
  • Se colors.json.literal não tiver um valor, colors.json é usado.
  • Se colors.json não tiver um valor, a cor de texto padrão do shell de comando (AllowedColors.None) será usada.

Definir o tamanho do recuo

Atualmente, a personalização do tamanho de recuo de resposta é suportada apenas para JSON. O tamanho padrão é dois espaços. Por exemplo:

[
  {
    "id": 1,
    "name": "Apple"
  },
  {
    "id": 2,
    "name": "Orange"
  },
  {
    "id": 3,
    "name": "Strawberry"
  }
]

Para alterar o tamanho padrão, defina a formatting.json.indentSize chave. Por exemplo, usar sempre quatro espaços:

pref set formatting.json.indentSize 4

As respostas subsequentes honram a definição de quatro espaços:

[
    {
        "id": 1,
        "name": "Apple"
    },
    {
        "id": 2,
        "name": "Orange"
    },
    {
        "id": 3,
        "name": "Strawberry"
    }
]

Definir o editor de texto padrão

Por padrão, o HttpRepl não tem nenhum editor de texto configurado para uso. Para testar métodos de API da Web que exigem um corpo de solicitação HTTP, um editor de texto padrão deve ser definido. A ferramenta HttpRepl inicia o editor de texto configurado com o único propósito de compor o corpo da solicitação. Execute o seguinte comando para definir seu editor de texto preferido como padrão:

pref set editor.command.default "<EXECUTABLE>"

No comando anterior, <EXECUTABLE> é o caminho completo para o arquivo executável do editor de texto. Por exemplo, execute o seguinte comando para definir o Visual Studio Code como o editor de texto padrão:

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

Para iniciar o editor de texto padrão com argumentos específicos da CLI, defina a editor.command.default.arguments chave. Por exemplo, suponha que o Visual Studio Code é o editor de texto padrão e que você sempre deseja que o HttpRepl abra o Visual Studio Code em uma nova sessão com extensões desabilitadas. Execute o seguinte comando:

pref set editor.command.default.arguments "--disable-extensions --new-window"

Tip

Se o seu editor padrão for o Visual Studio Code, normalmente irá querer passar o argumento -w ou --wait para forçar o Visual Studio Code a aguardar que feche o arquivo antes de retornar.

Definir os caminhos de pesquisa da Descrição da OpenAPI

Por padrão, o HttpRepl tem um conjunto de caminhos relativos que ele usa para encontrar a descrição OpenAPI ao executar o connect comando sem a --openapi opção. Esses caminhos relativos são combinados com os caminhos raiz e base especificados no connect comando. Os caminhos relativos padrão são:

  • swagger.json
  • swagger/v1/swagger.json
  • /swagger.json
  • /swagger/v1/swagger.json
  • openapi.json
  • /openapi.json

Para usar um conjunto diferente de caminhos de pesquisa em seu ambiente, defina a swagger.searchPaths preferência. O valor deve ser uma lista delimitada por barra vertical de caminhos relativos. Por exemplo:

pref set swagger.searchPaths "swagger/v2/swagger.json|swagger/v3/swagger.json"

Em vez de substituir completamente a lista padrão, a lista também pode ser modificada adicionando ou removendo caminhos.

Para adicionar um ou mais caminhos de pesquisa à lista padrão, defina a swagger.addToSearchPaths preferência. O valor deve ser uma lista delimitada por barra vertical de caminhos relativos. Por exemplo:

pref set swagger.addToSearchPaths "openapi/v2/openapi.json|openapi/v3/openapi.json"

Para remover um ou mais caminhos de pesquisa da lista padrão, defina a swagger.addToSearchPaths preferência. O valor deve ser uma lista delimitada por barra vertical de caminhos relativos. Por exemplo:

pref set swagger.removeFromSearchPaths "swagger.json|/swagger.json"

Testar solicitações HTTP GET

Synopsis

get <PARAMETER> [-F|--no-formatting] [-h|--header] [--response:body] [--response:headers] [-s|--streaming]

Arguments

PARAMETER

O parâmetro de rota, se houver, esperado pelo método de ação do controlador associado.

Opções

As seguintes opções estão disponíveis para o get comando:

  • -F|--no-formatting

    Um sinalizador cuja presença suprime a formatação de resposta HTTP.

  • -h|--header

    Define um cabeçalho de solicitação HTTP. Os dois formatos de valor a seguir são suportados:

    • {header}={value}
    • {header}:{value}
  • --response:body

    Especifica um arquivo no qual o corpo da resposta HTTP deve ser gravado. Por exemplo, --response:body "C:\response.json". O ficheiro é criado se não existir.

  • --response:headers

    Especifica um arquivo no qual os cabeçalhos de resposta HTTP devem ser gravados. Por exemplo, --response:headers "C:\response.txt". O ficheiro é criado se não existir.

  • -s|--streaming

    Um sinalizador cuja presença permite o streaming da resposta HTTP.

Example

Para emitir uma solicitação HTTP GET:

  1. Corra o get comando num ponto de extremidade que ofereça suporte a ele:

    https://localhost:5001/people> get
    

    O comando anterior exibe o seguinte formato de saída:

    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 um registro específico passando um parâmetro para o get comando:

    https://localhost:5001/people> get 2
    

    O comando anterior exibe o seguinte formato de saída:

    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>
    

Testar solicitações HTTP POST

Synopsis

post <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]

Arguments

PARAMETER

O parâmetro de rota, se houver, esperado pelo método de ação do controlador associado.

Opções

  • -F|--no-formatting

    Um sinalizador cuja presença suprime a formatação de resposta HTTP.

  • -h|--header

    Define um cabeçalho de solicitação HTTP. Os dois formatos de valor a seguir são suportados:

    • {header}={value}
    • {header}:{value}
  • --response:body

    Especifica um arquivo no qual o corpo da resposta HTTP deve ser gravado. Por exemplo, --response:body "C:\response.json". O ficheiro é criado se não existir.

  • --response:headers

    Especifica um arquivo no qual os cabeçalhos de resposta HTTP devem ser gravados. Por exemplo, --response:headers "C:\response.txt". O ficheiro é criado se não existir.

  • -s|--streaming

    Um sinalizador cuja presença permite o streaming da resposta HTTP.

  • -c|--content

    Fornece um corpo de solicitação HTTP embutido. Por exemplo, -c "{\"id\":2,\"name\":\"Cherry\"}".

  • -f|--file

    Fornece um caminho para um arquivo que contém o corpo da solicitação HTTP. Por exemplo, -f "C:\request.json".

  • --no-body

    Indica que nenhum corpo de solicitação HTTP é necessário.

Example

Para emitir uma solicitação HTTP POST:

  1. Corra o post comando num ponto de extremidade que ofereça suporte a ele:

    https://localhost:5001/people> post -h Content-Type=application/json
    

    No comando anterior, o cabeçalho da solicitação HTTP Content-Type é configurado para indicar que o tipo de conteúdo do corpo da solicitação é JSON. O editor de texto padrão abre um arquivo .tmp com um modelo JSON representando o corpo da solicitação HTTP. Por exemplo:

    {
      "id": 0,
      "name": ""
    }
    

    Tip

    Para definir o editor de texto padrão, consulte a seção Definir o editor de texto padrão .

  2. Modifique o modelo JSON para satisfazer os requisitos de validação do modelo:

    {
      "id": 0,
      "name": "Scott Addie"
    }
    
  3. Salve o arquivo .tmp e feche o editor de texto. A seguinte saída aparece no shell de comando:

    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>
    

Testar solicitações HTTP PUT

Synopsis

put <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]

Arguments

PARAMETER

O parâmetro de rota, se houver, esperado pelo método de ação do controlador associado.

Opções

  • -F|--no-formatting

    Um sinalizador cuja presença suprime a formatação de resposta HTTP.

  • -h|--header

    Define um cabeçalho de solicitação HTTP. Os dois formatos de valor a seguir são suportados:

    • {header}={value}
    • {header}:{value}
  • --response:body

    Especifica um arquivo no qual o corpo da resposta HTTP deve ser gravado. Por exemplo, --response:body "C:\response.json". O ficheiro é criado se não existir.

  • --response:headers

    Especifica um arquivo no qual os cabeçalhos de resposta HTTP devem ser gravados. Por exemplo, --response:headers "C:\response.txt". O ficheiro é criado se não existir.

  • -s|--streaming

    Um sinalizador cuja presença permite o streaming da resposta HTTP.

  • -c|--content

    Fornece um corpo de solicitação HTTP embutido. Por exemplo, -c "{\"id\":2,\"name\":\"Cherry\"}".

  • -f|--file

    Fornece um caminho para um arquivo que contém o corpo da solicitação HTTP. Por exemplo, -f "C:\request.json".

  • --no-body

    Indica que nenhum corpo de solicitação HTTP é necessário.

Example

Para emitir uma solicitação HTTP PUT:

  1. Opcional: Execute o get comando para exibir os dados antes de modificá-los:

    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. Corra o put comando num ponto de extremidade que ofereça suporte a ele:

    https://localhost:5001/fruits> put 2 -h Content-Type=application/json
    

    No comando anterior, o cabeçalho da solicitação HTTP Content-Type é configurado para indicar que o tipo de conteúdo do corpo da solicitação é JSON. O editor de texto padrão abre um arquivo .tmp com um modelo JSON representando o corpo da solicitação HTTP. Por exemplo:

    {
      "id": 0,
      "name": ""
    }
    

    Tip

    Para definir o editor de texto padrão, consulte a seção Definir o editor de texto padrão .

  3. Modifique o modelo JSON para satisfazer os requisitos de validação do modelo:

    {
      "id": 2,
      "name": "Cherry"
    }
    
  4. Salve o arquivo .tmp e feche o editor de texto. A seguinte saída aparece no shell de comando:

    [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 um get comando para ver as modificações. Por exemplo, se você digitou "Cherry" no editor de texto, a get retorna a seguinte saída:

    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>
    

Testar solicitações HTTP DELETE

Synopsis

delete <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]

Arguments

PARAMETER

O parâmetro de rota, se houver, esperado pelo método de ação do controlador associado.

Opções

  • -F|--no-formatting

    Um sinalizador cuja presença suprime a formatação de resposta HTTP.

  • -h|--header

    Define um cabeçalho de solicitação HTTP. Os dois formatos de valor a seguir são suportados:

    • {header}={value}
    • {header}:{value}
  • --response:body

    Especifica um arquivo no qual o corpo da resposta HTTP deve ser gravado. Por exemplo, --response:body "C:\response.json". O ficheiro é criado se não existir.

  • --response:headers

    Especifica um arquivo no qual os cabeçalhos de resposta HTTP devem ser gravados. Por exemplo, --response:headers "C:\response.txt". O ficheiro é criado se não existir.

  • -s|--streaming

    Um sinalizador cuja presença permite o streaming da resposta HTTP.

Example

Para emitir uma solicitação HTTP DELETE:

  1. Opcional: Execute o get comando para exibir os dados antes de modificá-los:

    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. Corra o delete comando num ponto de extremidade que ofereça suporte a ele:

    https://localhost:5001/fruits> delete 2
    

    O comando anterior exibe o seguinte formato de saída:

    HTTP/1.1 204 No Content
    Date: Fri, 28 Jun 2019 17:36:42 GMT
    Server: Kestrel
    
  3. Opcional: emita um get comando para ver as modificações. Neste exemplo, a get retorna a seguinte saída:

    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>
    

Testar solicitações HTTP PATCH

Synopsis

patch <PARAMETER> [-c|--content] [-f|--file] [-h|--header] [--no-body] [-F|--no-formatting] [--response] [--response:body] [--response:headers] [-s|--streaming]

Arguments

PARAMETER

O parâmetro de rota, se houver, esperado pelo método de ação do controlador associado.

Opções

  • -F|--no-formatting

    Um sinalizador cuja presença suprime a formatação de resposta HTTP.

  • -h|--header

    Define um cabeçalho de solicitação HTTP. Os dois formatos de valor a seguir são suportados:

    • {header}={value}
    • {header}:{value}
  • --response:body

    Especifica um arquivo no qual o corpo da resposta HTTP deve ser gravado. Por exemplo, --response:body "C:\response.json". O ficheiro é criado se não existir.

  • --response:headers

    Especifica um arquivo no qual os cabeçalhos de resposta HTTP devem ser gravados. Por exemplo, --response:headers "C:\response.txt". O ficheiro é criado se não existir.

  • -s|--streaming

    Um sinalizador cuja presença permite o streaming da resposta HTTP.

  • -c|--content

    Fornece um corpo de solicitação HTTP embutido. Por exemplo, -c "{\"id\":2,\"name\":\"Cherry\"}".

  • -f|--file

    Fornece um caminho para um arquivo que contém o corpo da solicitação HTTP. Por exemplo, -f "C:\request.json".

  • --no-body

    Indica que nenhum corpo de solicitação HTTP é necessário.

Testes de solicitações HTTP HEAD

Synopsis

head <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]

Arguments

PARAMETER

O parâmetro de rota, se houver, esperado pelo método de ação do controlador associado.

Opções

  • -F|--no-formatting

    Um sinalizador cuja presença suprime a formatação de resposta HTTP.

  • -h|--header

    Define um cabeçalho de solicitação HTTP. Os dois formatos de valor a seguir são suportados:

    • {header}={value}
    • {header}:{value}
  • --response:body

    Especifica um arquivo no qual o corpo da resposta HTTP deve ser gravado. Por exemplo, --response:body "C:\response.json". O ficheiro é criado se não existir.

  • --response:headers

    Especifica um arquivo no qual os cabeçalhos de resposta HTTP devem ser gravados. Por exemplo, --response:headers "C:\response.txt". O ficheiro é criado se não existir.

  • -s|--streaming

    Um sinalizador cuja presença permite o streaming da resposta HTTP.

Testar solicitações HTTP OPTIONS

Synopsis

options <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]

Arguments

PARAMETER

O parâmetro de rota, se houver, esperado pelo método de ação do controlador associado.

Opções

  • -F|--no-formatting

    Um sinalizador cuja presença suprime a formatação de resposta HTTP.

  • -h|--header

    Define um cabeçalho de solicitação HTTP. Os dois formatos de valor a seguir são suportados:

    • {header}={value}
    • {header}:{value}
  • --response:body

    Especifica um arquivo no qual o corpo da resposta HTTP deve ser gravado. Por exemplo, --response:body "C:\response.json". O ficheiro é criado se não existir.

  • --response:headers

    Especifica um arquivo no qual os cabeçalhos de resposta HTTP devem ser gravados. Por exemplo, --response:headers "C:\response.txt". O ficheiro é criado se não existir.

  • -s|--streaming

    Um sinalizador cuja presença permite o streaming da resposta HTTP.

Definir cabeçalhos de solicitação HTTP

Para definir um cabeçalho de solicitação HTTP, use uma das seguintes abordagens:

  • Defina em linha com a solicitação HTTP. Por exemplo:

    https://localhost:5001/people> post -h Content-Type=application/json
    

    Com a abordagem anterior, cada cabeçalho de solicitação HTTP distinto requer sua própria -h opção.

  • Defina antes de enviar a solicitação HTTP. Por exemplo:

    https://localhost:5001/people> set header Content-Type application/json
    

    Ao definir o cabeçalho antes de enviar uma solicitação, o cabeçalho permanece definido durante a sessão do shell de comando. Para limpar o cabeçalho, forneça um valor vazio. Por exemplo:

    https://localhost:5001/people> set header Content-Type
    

Testar pontos finais seguros

O HttpRepl suporta o teste de pontos de extremidade seguros das seguintes maneiras:

  • Através das credenciais padrão do usuário conectado.
  • Através do uso de cabeçalhos de solicitação HTTP.

Credenciais padrão

Considere uma API da Web que você está testando hospedada no IIS e protegida com autenticação do Windows. Você deseja que as credenciais do usuário que executa a ferramenta fluam para os pontos de extremidade HTTP que estão sendo testados. Para passar as credenciais padrão do usuário conectado:

  1. Defina a httpClient.useDefaultCredentials preferência para true:

    pref set httpClient.useDefaultCredentials true
    
  2. Saia e reinicie a ferramenta antes de enviar outra solicitação para a API da Web.

Credenciais de proxy padrão

Considere um cenário em que a API da Web que você está testando esteja atrás de um proxy protegido com autenticação do Windows. Você deseja que as credenciais do usuário que executa a ferramenta fluam para o proxy. Para passar as credenciais padrão do usuário conectado:

  1. Defina a httpClient.proxy.useDefaultCredentials preferência para true:

    pref set httpClient.proxy.useDefaultCredentials true
    
  2. Saia e reinicie a ferramenta antes de enviar outra solicitação para a API da Web.

Cabeçalhos de solicitação HTTP

Exemplos de esquemas de autenticação e autorização suportados incluem:

  • Autenticação básica
  • Tokens ao portador JWT
  • Autenticação Digest

Por exemplo, você pode enviar um token bearer para um endpoint com o seguinte comando:

set header Authorization "bearer <TOKEN VALUE>"

Para acessar um ponto de extremidade hospedado no Azure ou usar a API do AzureREST, você precisa de um token de portador. Use as etapas a seguir para obter um token de portador para sua assinatura do Azure por meio da CLI do Azure. O HttpRepl define o token de portador em um cabeçalho de solicitação HTTP. Uma lista de Aplicativos Web do Serviço de Aplicativo do Azure é recuperada.

  1. Entre no Azure:

    az login
    
  2. Obtenha o ID da sua subscrição com o seguinte comando:

    az account show --query id
    
  3. Copie o ID da sua subscrição e execute o seguinte comando:

    az account set --subscription "<SUBSCRIPTION ID>"
    
  4. Obtenha o seu token de portador com o seguinte comando:

    az account get-access-token --query accessToken
    
  5. Conecte-se à API do Azure REST por meio do HttpRepl:

    httprepl https://management.azure.com
    
  6. Defina o cabeçalho da Authorization solicitação HTTP:

    https://management.azure.com/> set header Authorization "bearer <ACCESS TOKEN>"
    
  7. Navegue até a assinatura:

    https://management.azure.com/> cd subscriptions/<SUBSCRIPTION ID>
    
  8. Obtenha uma lista dos Aplicativos Web do Serviço de Aplicativo do Azure da sua assinatura:

    https://management.azure.com/subscriptions/{SUBSCRIPTION ID}> get providers/Microsoft.Web/sites?api-version=2016-08-01
    

    A seguinte resposta é exibida:

    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>
      ]
    }
    

Alternar exibição de solicitação HTTP

Por padrão, a exibição da solicitação HTTP que está sendo enviada é suprimida. É possível alterar a configuração correspondente durante a sessão do shell de comando.

Ativar a exibição de solicitações

Exiba a solicitação HTTP que está sendo enviada executando o echo on comando. Por exemplo:

https://localhost:5001/people> echo on
Request echoing is on

As solicitações HTTP subsequentes na sessão atual exibem os cabeçalhos das solicitações. Por exemplo:

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>

Desativar a exibição de solicitações

Suprima a exibição da solicitação HTTP que está sendo enviada executando o echo off comando. Por exemplo:

https://localhost:5001/people> echo off
Request echoing is off

Executar um script

Se você executar com freqüência o mesmo conjunto de comandos HttpRepl, considere armazená-los em um arquivo de texto. Os comandos no arquivo assumem a mesma forma que os comandos executados manualmente na linha de comando. Os comandos podem ser executados em lote usando o run comando. Por exemplo:

  1. Crie um arquivo de texto contendo um conjunto de comandos delimitados por nova linha. Para ilustrar, considere um arquivo people-script.txt contendo os seguintes comandos:

    set base https://localhost:5001
    ls
    cd People
    ls
    get 1
    
  2. Execute o run comando, passando o caminho do arquivo de texto. Por exemplo:

    https://localhost:5001/> run C:\http-repl-scripts\people-script.txt
    

    A seguinte saída é exibida:

    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>
    

Limpar a saída

Para remover toda a saída gravada no shell de comando pela ferramenta HttpRepl, execute os comandos clear ou cls. Para ilustrar, imagine que o shell de comando contém a seguinte saída:

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/>

Execute o seguinte comando para limpar a saída:

https://localhost:5001/> clear

Depois de executar o comando anterior, o shell de comando contém apenas a seguinte saída:

https://localhost:5001/>

Recursos adicionais