Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
HTTP Read-Eval-Print Loop (РЭПЛ):
- Упрощенное кроссплатформенное средство командной строки, поддерживаемое везде, где поддерживается .NET.
- служит для создания HTTP-запросов с целью тестирования веб-API ASP.NET Core (а также веб-API, не связанных с ASP.NET Core) и просмотра их результатов;
- может использоваться для тестирования веб-API, размещенных в любой среде, включая localhost и Службу приложений Azure.
Поддерживаются следующие HTTP-команды:
Для выполнения дальнейших инструкций просмотрите или скачайте пример веб-API ASP.NET Core (как скачивать).
Prerequisites
Installation
Чтобы установить HttpRepl, выполните следующую команду:
dotnet tool install -g Microsoft.dotnet-httprepl
Глобальное средство .NET устанавливается из пакета NuGet Microsoft.dotnet-httprepl.
Note
По умолчанию архитектура двоичных файлов .NET для установки представляет архитектуру операционной системы. Чтобы указать другую архитектуру ОС, смотрите инструмент dotnet, параметр --arch. Дополнительные сведения см. в статье о проблеме GitHub dotnet/AspNetCore.Docs #29262.
В macOS обновите путь:
export PATH="$HOME/.dotnet/tools:$PATH"
Usage
После успешной установки HttpRepl выполните следующую команду, чтобы запустить средство:
httprepl
Чтобы просмотреть доступные команды HttpRepl, выполните одну из следующих команд:
httprepl -h
httprepl --help
Выводится следующий результат.
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 поддерживается завершение команд. Нажимая клавишу TAB, можно переходить по списку команд, которые начинаются с введенных символов или конечной точки API. Доступные команды CLI описываются в следующих разделах.
Подключение к веб-API
Чтобы подключиться к веб-API, выполните следующую команду:
httprepl <ROOT URI>
<ROOT URI>
— это базовый универсальный код ресурса (URI) для веб-API. For example:
httprepl https://localhost:5001
Кроме того, когда программа HttpRepl запущена, можно в любой момент выполнить следующую команду:
connect <ROOT URI>
For example:
(Disconnected)> connect https://localhost:5001
Создание ссылки на описание OpenAPI для веб-API вручную
Приведенная выше команда для подключения попытается автоматически найти описание OpenAPI. Если по какой-то причине это не удается, вы можете указать URI описания OpenAPI для веб-API, используя параметр --openapi
:
connect <ROOT URI> --openapi <OPENAPI DESCRIPTION ADDRESS>
For example:
(Disconnected)> connect https://localhost:5001 --openapi /swagger/v1/swagger.json
Включение подробного вывода для получения сведений о поиске, синтаксическом анализе и проверке описания OpenAPI
Если указать параметр --verbose
с помощью команды connect
, когда средство выполняет поиск описания OpenAPI, а также анализирует и проверяет его, будут получены дополнительные сведения.
connect <ROOT URI> --verbose
For example:
(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]
Навигация по веб-API
Просмотр доступных конечных точек
Чтобы получить список конечных точек (контроллеров) по текущему пути веб-API, выполните команду ls
или dir
:
https://localhost:5001/> ls
Будут выведены данные в следующем формате:
. []
Fruits [get|post]
People [get|post]
https://localhost:5001/>
Из приведенных выше результатов видно, что доступно два контроллера: Fruits
и People
. Они оба поддерживают операции HTTP GET и POST без параметров.
Более подробную информацию можно получить, перейдя к определенному контроллеру. Например, из выходных данных приведенной ниже команды видно, что контроллер Fruits
также поддерживает операции HTTP GET, PUT и DELETE. Каждая из этих операций принимает параметр id
в маршруте:
https://localhost:5001/fruits> ls
. [get|post]
.. []
{id} [get|put|delete]
https://localhost:5001/fruits>
Кроме того, можно выполнить команду ui
, чтобы открыть страницу с пользовательским интерфейсом Swagger веб-API в браузере. For example:
https://localhost:5001/> ui
Переход к конечной точке
Чтобы перейти к другой конечной точке веб-API, выполните команду cd
:
https://localhost:5001/> cd people
В пути, указываемом после команды cd
, регистр символов не учитывается. Будут выведены данные в следующем формате:
/people [get|post]
https://localhost:5001/people>
Настройте HttpRepl
Цвета, используемые в HttpRepl по умолчанию, можно настроить. Кроме того, можно определить текстовый редактор по умолчанию. Настройки HttpRepl сохраняются на протяжении текущего сеанса и учитываются при открытии следующих сеансов. Измененные настройки хранятся в следующем файле:
Файл HTTPREPLPREFS загружается при запуске. Во время выполнения изменения в нем не отслеживаются. Изменения, внесенные в него вручную, вступают в силу только после перезапуска средства.
Просмотр параметров
Чтобы просмотреть доступные параметры, выполните команду pref get
. For example:
https://localhost:5001/> pref get
В результате выполнения приведенной выше команды выводятся доступные пары "ключ-значение":
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
Настройки цветов
Раскрашивание ответов в настоящее время поддерживается только для JSON. Чтобы настроить цвета по умолчанию в программе HttpRepl, найдите ключ, соответствующий изменяемому цвету. Инструкции по поиску ключей см. в разделе Просмотр параметров. Например, измените значение ключа colors.json
с Green
на White
следующим образом:
https://localhost:5001/people> pref set colors.json White
Можно использовать только допустимые цвета. При выполнении последующих HTTP-запросов к выходным данным будут применяться новые цвета.
Если определенные цветовые ключи не заданы, используются более общие ключи. Продемонстрировать резервное поведение системы на следующем примере:
- Если у
colors.json.name
нет значения, используетсяcolors.json.string
. - Если у
colors.json.string
нет значения, используетсяcolors.json.literal
. - Если у
colors.json.literal
нет значения, используетсяcolors.json
. - Если у
colors.json
нет значения, используется текст цвета по умолчанию для командной оболочки (AllowedColors.None
).
Задать размер отступа
Настройка размера отступа в ответах в настоящее время поддерживается только для JSON. Размер по умолчанию — два пробела. For example:
[
{
"id": 1,
"name": "Apple"
},
{
"id": 2,
"name": "Orange"
},
{
"id": 3,
"name": "Strawberry"
}
]
Чтобы изменить размер по умолчанию, задайте ключ formatting.json.indentSize
. Например, чтобы всегда использовать четыре пробела:
pref set formatting.json.indentSize 4
В последующих ответах используют четыре пробела.
[
{
"id": 1,
"name": "Apple"
},
{
"id": 2,
"name": "Orange"
},
{
"id": 3,
"name": "Strawberry"
}
]
Установка текстового редактора по умолчанию
По умолчанию текстовый редактор для HttpRepl не настроен. Для тестирования методов веб-API, требующих текста HTTP-запроса, необходимо задать текстовый редактор по умолчанию. Средство HttpRepl запускает настроенный текстовый редактор исключительно в целях составления текста запроса. Чтобы указать текстовый редактор по умолчанию, выполните следующую команду:
pref set editor.command.default "<EXECUTABLE>"
В приведенной выше команде <EXECUTABLE>
— это полный путь к исполняемому файлу текстового редактора. Например, чтобы задать Visual Studio Code как текстовый редактор по умолчанию, выполните следующую команду:
Чтобы текстовый редактор по умолчанию запускался с определенными аргументами CLI, задайте ключ editor.command.default.arguments
. Например, предположим, что Visual Studio Code — это текстовый редактор по умолчанию и необходимо, чтобы средство HttpRepl всегда запускало сеанс Visual Studio Code с отключенными расширениями. Выполните следующую команду:
pref set editor.command.default.arguments "--disable-extensions --new-window"
Tip
Если Visual Studio Code является редактором по умолчанию, обычно вы хотите передать аргумент -w
или --wait
, чтобы Visual Studio Code принудительно ожидал, пока вы закроете файл перед возвратом.
Задайте пути поиска описания OpenAPI
По умолчанию HttpRepl имеет набор относительных путей для поиска описания OpenAPI при выполнении команды connect
без параметра --openapi
. Эти относительные пути объединяются с корневыми и базовыми путями, указанными в команде connect
. Относительные пути по умолчанию:
swagger.json
swagger/v1/swagger.json
/swagger.json
/swagger/v1/swagger.json
openapi.json
/openapi.json
Чтобы использовать другой набор путей поиска в среде, используйте параметр swagger.searchPaths
. Значение должно представлять собой список относительных путей, разделенных вертикальной чертой. For example:
pref set swagger.searchPaths "swagger/v2/swagger.json|swagger/v3/swagger.json"
Вместо того чтобы полностью заменять список по умолчанию, его можно изменить, добавив или удалив пути.
Чтобы добавить один или несколько путей поиска в список по умолчанию, задайте параметр swagger.addToSearchPaths
. Значение должно представлять собой список относительных путей, разделенных вертикальной чертой. For example:
pref set swagger.addToSearchPaths "openapi/v2/openapi.json|openapi/v3/openapi.json"
Чтобы удалить один или несколько путей поиска из списка по умолчанию, задайте параметр swagger.addToSearchPaths
. Значение должно представлять собой список относительных путей, разделенных вертикальной чертой. For example:
pref set swagger.removeFromSearchPaths "swagger.json|/swagger.json"
Тестирование HTTP-запросов GET
Synopsis
get <PARAMETER> [-F|--no-formatting] [-h|--header] [--response:body] [--response:headers] [-s|--streaming]
Arguments
PARAMETER
Параметр маршрута, который требуется методу действия соответствующего контроллера.
Options
Для команды get
доступны следующие параметры:
-F|--no-formatting
Флаг, наличие которого подавляет форматирование HTTP-ответа.
-h|--header
Задает заголовок HTTP-запроса. Поддерживаются следующие два формата значений:
{header}={value}
{header}:{value}
--response:body
Указывает файл, в который должен быть записан текст HTTP-ответа. Например,
--response:body "C:\response.json"
. Если файл не существует, он создается.--response:headers
Указывает файл, в который должны быть записаны заголовки HTTP-ответа. Например,
--response:headers "C:\response.txt"
. Если файл не существует, он создается.-s|--streaming
Флаг, при установке которого включается потоковая передача HTTP-ответа.
Example
Чтобы отправить HTTP-запрос GET, выполните указанные ниже действия.
Выполните команду
get
в конечной точке, которая поддерживает ее:https://localhost:5001/people> get
Выходные данные приведенной выше команды имеют следующий формат:
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>
Получите определенную запись, передав параметр в команду
get
:https://localhost:5001/people> get 2
Выходные данные приведенной выше команды имеют следующий формат:
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>
Тестирование 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
Параметр маршрута, который требуется методу действия соответствующего контроллера.
Options
-F|--no-formatting
Флаг, наличие которого подавляет форматирование HTTP-ответа.
-h|--header
Задает заголовок HTTP-запроса. Поддерживаются следующие два формата значений:
{header}={value}
{header}:{value}
--response:body
Указывает файл, в который должен быть записан текст HTTP-ответа. Например,
--response:body "C:\response.json"
. Если файл не существует, он создается.--response:headers
Указывает файл, в который должны быть записаны заголовки HTTP-ответа. Например,
--response:headers "C:\response.txt"
. Если файл не существует, он создается.-s|--streaming
Флаг, при установке которого включается потоковая передача HTTP-ответа.
-c|--content
Предоставляет встроенный текст HTTP-запроса. Например,
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Предоставляет путь к файлу, содержащему текст HTTP-запроса. Например,
-f "C:\request.json"
.--no-body
Указывает, что текст HTTP-запроса не требуется.
Example
Чтобы отправить HTTP-запрос POST, выполните указанные ниже действия.
Выполните команду
post
в конечной точке, которая поддерживает ее:https://localhost:5001/people> post -h Content-Type=application/json
В приведенной выше команде в заголовке HTTP-запроса
Content-Type
указан формат текста запроса JSON. В текстовом редакторе по умолчанию открывается файл TMP с шаблоном JSON, представляющим текст HTTP-запроса. For example:{ "id": 0, "name": "" }
Tip
Инструкции по определению текстового редактора по умолчанию см. в разделе Установка текстового редактора по умолчанию.
Измените шаблон JSON в соответствии с требованиями к проверке модели:
{ "id": 0, "name": "Scott Addie" }
Сохраните файл TMP и закройте текстовый редактор. В командной оболочке появятся следующие выходные данные:
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>
Тестирование 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
Параметр маршрута, который требуется методу действия соответствующего контроллера.
Options
-F|--no-formatting
Флаг, наличие которого подавляет форматирование HTTP-ответа.
-h|--header
Задает заголовок HTTP-запроса. Поддерживаются следующие два формата значений:
{header}={value}
{header}:{value}
--response:body
Указывает файл, в который должен быть записан текст HTTP-ответа. Например,
--response:body "C:\response.json"
. Если файл не существует, он создается.--response:headers
Указывает файл, в который должны быть записаны заголовки HTTP-ответа. Например,
--response:headers "C:\response.txt"
. Если файл не существует, он создается.-s|--streaming
Флаг, при установке которого включается потоковая передача HTTP-ответа.
-c|--content
Предоставляет встроенный текст HTTP-запроса. Например,
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Предоставляет путь к файлу, содержащему текст HTTP-запроса. Например,
-f "C:\request.json"
.--no-body
Указывает, что текст HTTP-запроса не требуется.
Example
Чтобы отправить HTTP-запрос PUT, выполните указанные ниже действия.
Необязательный: выполните
get
команду, чтобы просмотреть данные перед изменением: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" } ]
Выполните команду
put
в конечной точке, которая поддерживает ее:https://localhost:5001/fruits> put 2 -h Content-Type=application/json
В приведенной выше команде в заголовке HTTP-запроса
Content-Type
указан формат текста запроса JSON. В текстовом редакторе по умолчанию открывается файл TMP с шаблоном JSON, представляющим текст HTTP-запроса. For example:{ "id": 0, "name": "" }
Tip
Инструкции по определению текстового редактора по умолчанию см. в разделе Установка текстового редактора по умолчанию.
Измените шаблон JSON в соответствии с требованиями к проверке модели:
{ "id": 2, "name": "Cherry" }
Сохраните файл TMP и закройте текстовый редактор. В командной оболочке появятся следующие выходные данные:
[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
Необязательно. Выполните
get
команду, чтобы просмотреть изменения. Например, если вы ввели «вишня» в текстовом редакторе, командаget
вернет следующие выходные данные: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>
Тестирование HTTP-запросов DELETE
Synopsis
delete <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Arguments
PARAMETER
Параметр маршрута, который требуется методу действия соответствующего контроллера.
Options
-F|--no-formatting
Флаг, наличие которого подавляет форматирование HTTP-ответа.
-h|--header
Задает заголовок HTTP-запроса. Поддерживаются следующие два формата значений:
{header}={value}
{header}:{value}
--response:body
Указывает файл, в который должен быть записан текст HTTP-ответа. Например,
--response:body "C:\response.json"
. Если файл не существует, он создается.--response:headers
Указывает файл, в который должны быть записаны заголовки HTTP-ответа. Например,
--response:headers "C:\response.txt"
. Если файл не существует, он создается.-s|--streaming
Флаг, при установке которого включается потоковая передача HTTP-ответа.
Example
Чтобы отправить HTTP-запрос DELETE, выполните указанные ниже действия.
Необязательный: выполните
get
команду, чтобы просмотреть данные перед изменением: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" } ]
Выполните команду
delete
в конечной точке, которая поддерживает ее:https://localhost:5001/fruits> delete 2
Выходные данные приведенной выше команды имеют следующий формат:
HTTP/1.1 204 No Content Date: Fri, 28 Jun 2019 17:36:42 GMT Server: Kestrel
Необязательно. Выполните
get
команду, чтобы просмотреть изменения. В этом примере командаget
возвращает следующие данные: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>
Тестирование 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
Параметр маршрута, который требуется методу действия соответствующего контроллера.
Options
-F|--no-formatting
Флаг, наличие которого подавляет форматирование HTTP-ответа.
-h|--header
Задает заголовок HTTP-запроса. Поддерживаются следующие два формата значений:
{header}={value}
{header}:{value}
--response:body
Указывает файл, в который должен быть записан текст HTTP-ответа. Например,
--response:body "C:\response.json"
. Если файл не существует, он создается.--response:headers
Указывает файл, в который должны быть записаны заголовки HTTP-ответа. Например,
--response:headers "C:\response.txt"
. Если файл не существует, он создается.-s|--streaming
Флаг, при установке которого включается потоковая передача HTTP-ответа.
-c|--content
Предоставляет встроенный текст HTTP-запроса. Например,
-c "{\"id\":2,\"name\":\"Cherry\"}"
.-f|--file
Предоставляет путь к файлу, содержащему текст HTTP-запроса. Например,
-f "C:\request.json"
.--no-body
Указывает, что текст HTTP-запроса не требуется.
Тестирование HTTP-запросов HEAD
Synopsis
head <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Arguments
PARAMETER
Параметр маршрута, который требуется методу действия соответствующего контроллера.
Options
-F|--no-formatting
Флаг, наличие которого подавляет форматирование HTTP-ответа.
-h|--header
Задает заголовок HTTP-запроса. Поддерживаются следующие два формата значений:
{header}={value}
{header}:{value}
--response:body
Указывает файл, в который должен быть записан текст HTTP-ответа. Например,
--response:body "C:\response.json"
. Если файл не существует, он создается.--response:headers
Указывает файл, в который должны быть записаны заголовки HTTP-ответа. Например,
--response:headers "C:\response.txt"
. Если файл не существует, он создается.-s|--streaming
Флаг, при установке которого включается потоковая передача HTTP-ответа.
Тестирование OPTIONS-запросов HTTP
Synopsis
options <PARAMETER> [-F|--no-formatting] [-h|--header] [--response] [--response:body] [--response:headers] [-s|--streaming]
Arguments
PARAMETER
Параметр маршрута, который требуется методу действия соответствующего контроллера.
Options
-F|--no-formatting
Флаг, наличие которого подавляет форматирование HTTP-ответа.
-h|--header
Задает заголовок HTTP-запроса. Поддерживаются следующие два формата значений:
{header}={value}
{header}:{value}
--response:body
Указывает файл, в который должен быть записан текст HTTP-ответа. Например,
--response:body "C:\response.json"
. Если файл не существует, он создается.--response:headers
Указывает файл, в который должны быть записаны заголовки HTTP-ответа. Например,
--response:headers "C:\response.txt"
. Если файл не существует, он создается.-s|--streaming
Флаг, при установке которого включается потоковая передача HTTP-ответа.
Установка заголовков HTTP-запросов
Задать заголовок HTTP-запроса можно одним из следующих способов.
Установлено в рамках HTTP-запроса. For example:
https://localhost:5001/people> post -h Content-Type=application/json
При таком подходе для каждого заголовка HTTP-запроса требуется собственный параметр
-h
.Установите перед отправкой HTTP-запроса. For example:
https://localhost:5001/people> set header Content-Type application/json
Если заголовок задается перед отправкой запроса, он продолжает действовать на протяжении всего сеанса командной оболочки. Чтобы очистить заголовок, укажите пустое значение. For example:
https://localhost:5001/people> set header Content-Type
Проверка защищенных конечных точек
HttpRepl поддерживает проверку защищенных конечных точек следующими способами:
- С помощью учетных данных по умолчанию вошедшего в систему пользователя.
- С помощью заголовков HTTP-запросов.
Default credentials
Рассмотрим тестируемый веб-API, который размещен в IIS и защищен с помощью проверки подлинности Windows. Необходимо, чтобы учетные данные пользователя, запускающего средство, передавались в тестируемые конечные точки HTTP. Чтобы передать учетные данные по умолчанию вошедшего в систему пользователя, выполните следующие действия:
Установите для параметра
httpClient.useDefaultCredentials
значениеtrue
:pref set httpClient.useDefaultCredentials true
Закройте и перезапустите средство перед отправкой другого запроса в веб-API.
Учетные данные прокси-сервера по умолчанию
Рассмотрим ситуацию, в которой тестируемый веб-API находится за прокси-сервером, защищенным с помощью проверки подлинности Windows. Необходимо, чтобы учетные данные пользователя, запустившего средство, передавались на прокси-сервер. Чтобы передать учетные данные по умолчанию вошедшего в систему пользователя, выполните следующие действия:
Установите для параметра
httpClient.proxy.useDefaultCredentials
значениеtrue
:pref set httpClient.proxy.useDefaultCredentials true
Закройте и перезапустите средство перед отправкой другого запроса в веб-API.
Заголовки запросов HTTP
Ниже приведены примеры поддерживаемых схем проверки подлинности и авторизации.
- basic authentication
- Токены носителя JWT
- digest authentication
Например, можно отправить токен носителя в конечную точку с помощью следующей команды:
set header Authorization "bearer <TOKEN VALUE>"
Для доступа к конечной точке, размещенной в Azure, или для использования Azure REST API необходим токен носителя. Выполните следующие действия, чтобы получить токен носителя для подписки Azure с помощью Azure CLI. HttpRepl задает токен носителя в заголовке HTTP-запроса. Будет получен список веб-приложений службы приложений Azure.
Войдите в Azure.
az login
Получите идентификатор подписки с помощью следующей команды:
az account show --query id
Скопируйте идентификатор подписки и выполните следующую команду:
az account set --subscription "<SUBSCRIPTION ID>"
Получите токен носителя с помощью следующей команды:
az account get-access-token --query accessToken
Подключитесь к Azure REST API с помощью HttpRepl:
httprepl https://management.azure.com
Задайте заголовок запроса HTTP
Authorization
:https://management.azure.com/> set header Authorization "bearer <ACCESS TOKEN>"
Перейдите к подписке:
https://management.azure.com/> cd subscriptions/<SUBSCRIPTION ID>
Получите список веб-приложений Службы приложений Azure для вашей подписки:
https://management.azure.com/subscriptions/{SUBSCRIPTION ID}> get providers/Microsoft.Web/sites?api-version=2016-08-01
Появится следующий ответ:
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> ] }
Переключение отображения HTTP-запросов
По умолчанию отправляемый HTTP-запрос не отображается. Соответствующую настройку можно изменить на время сеанса командной оболочки.
Включение отображения запроса
Чтобы отправляемый HTTP-запрос отображался, выполните команду echo on
. For example:
https://localhost:5001/people> echo on
Request echoing is on
При отправке последующих HTTP-запросов в рамках текущего сеанса заголовки запросов будут отображаться. For example:
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>
Отключение отображения запроса
Чтобы отправляемый HTTP-запрос не отображался, выполните команду echo off
. For example:
https://localhost:5001/people> echo off
Request echoing is off
Выполнить сценарий
Если вы часто выполняете один и тот же набор команд HttpRepl, их можно сохранить в текстовом файле. Команды в файле имеют тот же формат, что и выполняемые вручную в командной строке. Их можно выполнять в пакетном режиме с помощью команды run
. For example:
Создайте текстовый файл с набором команд, разделенных символами новой строки. Например, это может быть файл people-script.txt со следующими командами:
set base https://localhost:5001 ls cd People ls get 1
Выполните команду
run
, передав в нее путь к текстовому файлу. For example:https://localhost:5001/> run C:\http-repl-scripts\people-script.txt
Отображаются следующие результаты:
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>
Очистка выходных данных
Чтобы удалить все выходные данные средства HttpRepl из командной оболочки, выполните команду clear
или cls
. Например, предположим, что в командной оболочке есть следующие выходные данные:
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/>
Чтобы очистить их, выполните следующую команду:
https://localhost:5001/> clear
После выполнения приведенной выше команды командная оболочка содержит только следующие выходные данные:
https://localhost:5001/>
Additional resources
ASP.NET Core