При работе с API важно иметь под рукой удобный инструмент для выполнения HTTP-запросов. Одним из таких инструментов является утилита командной строки HTTPie. Это мощный инструмент для работы с HTTP-запросами, который создан с акцентом на удобство использования человеком. По сравнению с curl, который часто применяется в скриптах и автоматизации, HTTPie предлагает более интуитивно понятный синтаксис и читабельный вывод. Одним из главных преимуществ HTTPie является его способность удобно работать с JSON данными.
В этом уроке мы рассмотрим основные возможности HTTPie и научимся отправлять HTTP-запросы, просматривать заголовки и тело ответа, а также самим отправлять заголовки и тело в запросе. Мы также узнаем, как использовать HTTPie для работы с JSON-данными
Знакомство с утилитой начнем с отправки простого GET запроса. Все что нужно HTTPie для выполнения такого запроса — это URL-адрес
http https://http.hexlet.app/http-api/example
HTTP/1.1 200 OK
CF-RAY: 8d692f33af78d365-FRA
Cache-Control: private, max-age=0
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=ISO-8859-1
# Тело
Done!
...
При таком запросе мы увидим на экране и заголовки и тело ответа. Если нам нужно увидеть только тело ответа, можно использовать опцию -b
http -b http.hexlet.app/http-api/example
Done!
Если нужно увидеть не только ответ, но и запрос, то понадобится флаг -v
или --verbose
. Он покажет все взаимодействие — и запрос и ответ:
http -v https://http.hexlet.app/http-api/example
# Запрос
GET /http-api/example HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: http.hexlet.app
User-Agent: HTTPie/3.2.1
# Ответ
HTTP/1.1 200 OK
CF-RAY: 8d6965117c4ed619-CDG
Cache-Control: private, max-age=0
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=ISO-8859-1
...
## Тело ответа
Done!
Параметры строки запроса
Нам может понадобиться отправить дополнительные данные на сервер в параметрах строки запроса. Чтобы не формировать строку вручную, мы можем передать параметры в виде пар ключ-значение, используя синтаксис param==value
. HTTPie автоматически распарсит их сформирует строку запроса:
# Используем опцию -v чтобы увидеть запрос
http -v https://http.hexlet.app/http-api/users skip==3 limit==1
# Из параметров автоматически сформировалась строка запроса
GET /http-api/users?skip=3&limit=1 HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: http.hexlet.app
User-Agent: HTTPie/3.2.1
# Ответ
...
HTTP метод
Утилита по умолчанию использует метод GET для запросов без тела и POST для запросов с телом. При этом утилита никак не ограничивает нас в самостоятельном выборе HTTP метода. Если нужно использовать другой метод, его имя указывается непосредственно перед аргументом URL:
http HEAD http.hexlet.app/http-api/example
Отправка заголовков
HTTPie сам по умолчанию устанавливает некоторые заголовки, ориентируясь на параметры при вызове утилиты:
http -v https://http.hexlet.app/http-api/example
Accept: */*
Accept-Encoding: gzip, deflate
User-Agent: HTTPie/<version>
Host: <taken-from-URL>
Но нам может понадобиться передать собственные заголовки или переопределить установленные по умолчанию. Чтобы передать собственный заголовок в запросе, используется синтаксис Header:Value
http -v https://http.hexlet.app/http-api/example X-Custom-Header:value X-Foo:Bar
GET /http-api/example HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: http.hexlet.app
User-Agent: HTTPie/3.2.1
## Наши собственные заголовки
X-Custom-Header: value
X-Foo: Bar
# Ответ
...
Указание тела в запросе
Утилита предоставляет удобный способ передать данные на сервер в теле запроса. Мы можем указать поля с данными в виде пар "ключ-значение" при помощи синтаксиса key=value
.
# Можем не указывать метод запроса
http -v https://http.hexlet.app/http-api/users \
firstName=John \
lastName=Doe \
email=john@mail.com \
password=secret
# Запрос
# Мы передаем тело, поэтому автоматически был выбран метод POST
POST /http-api/users HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 88
Content-Type: application/json
Host: http.hexlet.app
User-Agent: HTTPie/3.2.1
{
"email": "john@mail.com",
"firstName": "John",
"lastName": "Doe",
"password": "secret"
}
Поскольку JSON очень распространен в современных веб-сервисах, он используется в HTTPie как тип контента по умолчанию. Эти поля будут автоматически сериализованы как JSON-объект, что избавляет нас от необходимости его ручного составления. При этом HTTPie автоматически установит тип контента (заголовок Content-Type) application/json
Если нам понадобится отправить эти данные в виде формы, нужно будет использовать опцию -f
или --form
. Данные будут сериализованы как форма, а тип контента автоматически будет установлен application/x-www-form-urlencoded
http -v -f https://http.hexlet.app/http-api/users \
firstName=John \
lastName=Doe \
email=john@mail.com \
password=secret
# Запрос
POST /http-api/users HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 65
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: http.hexlet.app
User-Agent: HTTPie/3.2.1
firstName=John&lastName=Doe&email=john%40mail.com&password=secret
При необходимости можно передать и "сырое" тело. Это делается при помощи опции --raw
. Данные будут переданы на сервер как есть, без какого-либо преобразования:
http -v --raw 'Hello!' https://http.hexlet.app/http-api/echo
POST /http-api/echo HTTP/1.1
...
# Тело запроса
Hello!
Выводы
В этом уроке мы изучили, как использовать утилиту HTTPie для отправки HTTP-запросов. Мы научились отправлять различные типы запросов, устанавливать заголовки и тело запроса, а также использовать опции для изменения вывода результатов. HTTPie - это мощный и удобный инструмент, который поможет вам взаимодействовать с API
Самостоятельная работа
-
Установите HTTPie в вашу систему. Сделать это можно по [нашей инструкции](https://github.com/Hexlet/ru-instructions/blob/main/httpie.md)
-
Выполните у себя на компьютере все примеры из урока
-
С помощью HTTPie выполните CRUD-операции для Tasks
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.