Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

HTTPie HTTP API

При работе с 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


Самостоятельная работа

  1. Установите HTTPie в вашу систему. Сделать это можно по [нашей инструкции](https://github.com/Hexlet/ru-instructions/blob/main/httpie.md)

  2. Выполните у себя на компьютере все примеры из урока

  3. С помощью HTTPie выполните CRUD-операции для Tasks


Дополнительные материалы

  1. Официальная документация HTTPie
  2. Инструкция по установке HTTPie

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 7 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 7 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 7 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 7 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 7 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 7 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 7 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 7 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу