Как использовать HTTPie для взаимодействия с API из терминала
HTTPie — это HTTP-клиент для вашего терминала. Разработанный как современная альтернатива curl
, HTTPie упрощает взаимодействие с API, предлагая простой синтаксис и автоматически форматируемый вывод.
Доступно для Windows, Mac и Linux, настройка должна быть простой. Большинство дистрибутивов Linux теперь включают HTTPie в свои репозитории пакетов, поэтому вы можете быстро начать работу с apt
, dnf
или pacman
. Он также доступен для пользователей Homebrew для Mac и в виде пакета Python, поставляемого через Pip на всех трех платформах (pip install httpie
).
После установки HTTPie регистрирует команды http
и https
в вашей оболочке. Теперь у вас есть простой и выразительный способ вызова конечных точек API, не покидая терминала!
Основные команды
В простейшем случае HTTPie можно передать URL-адрес, чтобы немедленно выполнить запрос GET
:
http example.com
Чтобы отправить данные, укажите соответствующую команду HTTP, а затем передайте пары ключ/значение в качестве дополнительных параметров командной строки:
http POST example.com foo=bar hello=world
По умолчанию данные отправляются в формате JSON с соответствующими заголовками запроса. Чтобы вместо этого отправить форму, передайте параметр -f
.
При использовании синтаксиса JSON помните, что все поля обычно отправляются в виде строк. Вы можете использовать синтаксис :=
вместо =
для переключения в режим необработанных данных. Параметр examples:=[1, 2]
приведет к тому, что для ключа examples
будет задан массив из двух целых чисел.
Заголовки и файлы cookie
Чтобы установить заголовок запроса, укажите имя и значение заголовка в виде строки, разделенной двоеточием:
http GET example.com Authorization:foobar
HTTPie по умолчанию устанавливает некоторые заголовки, такие как User-Agent
. Их можно удалить, явно указав пустое значение.
Файлы cookie устанавливаются путем определения строки с файлами cookie в виде значений, разделенных двоеточием:
http GET example.com "Cookie:foo=bar;hello=world"
На самом деле это всего лишь частный случай установки заголовка Cookie
, который используется для отправки файлов cookie по HTTP.
Работа с файлами
Вы можете загружать и скачивать файлы, используя стандартные перенаправления оболочки:
http POST example.com/upload < ~/example.pdf http GET example.com/download.pdf > ~/download.pdf
Вы также можете загружать файлы как часть отправки формы HTTP, используя специальный синтаксис @
:
http -f POST example.com/form-with-file hello="Hello World" myUpload@~/example.pdf
Это будет действовать идентично вводу HTML-файла с name=\myUpload\
. Вместо этого вы можете загрузить данные из файла и внедрить их в запрос, используя синтаксис =@
вместо @
.
Сессии
HTTPie имеет встроенную поддержку постоянных сеансов. Это позволяет вам повторно использовать компоненты запроса, такие как заголовки HTTP и файлы cookie, между запросами, отправленными на один и тот же хост.
Вы создаете и используете сеансы, устанавливая параметр --session
. В качестве его значения укажите путь к файлу, в котором будет храниться ваша новая сессия.
http --session=./my-session.json GET example.com Authorization:foobar
Данные, поддерживаемые сеансами, такие как заголовок Authorization
в приведенном выше запросе, теперь будут сохранены в файле. В последующих запросах вы теперь можете опустить заголовок Authorization
— он будет автоматически включен, как это определено в вашем сеансе.
Вместо указания файла сеанса вы также можете использовать простое имя (--session=example
). В этом случае HTTPie автоматически сохранит сеанс во внутреннем управляемом файле. Каждый сеанс привязан к хосту, с которого он исходит, поэтому http --session=example example1.com
и http --session=example example2.com
будут существовать независимо друг от друга. другой.
Управление выводом
Одним из значительных улучшений HTTPie по сравнению с такими утилитами, как curl
, является автоматическое форматирование ответов. Тела JSON особенно хорошо обрабатываются, с правильными отступами, алфавитной сортировкой объектов по их ключам и правильным преобразованием символов Unicode.
Вы можете настроить способ отображения вывода, используя несколько различных параметров. Флаг --pretty
может быть установлен в --all
(по умолчанию), --colors
(только цвета), -- format
(только форматирование) или --none
(чтобы отключить всю обработку вывода и просмотреть необработанные данные).
Кроме того, вы можете изменить цветовую схему, используя флаг --style
. Доступны следующие схемы: auto
(по умолчанию), default
(используйте базовые стили библиотеки Pygments), fruity
и популярный monokai
.
Вам не нужно беспокоиться о форматировании по умолчанию при перенаправлении вывода в файл. HTTPie распознает перенаправление и просто передаст необработанные данные без применения какого-либо форматирования. Это также означает, что бинарные ответы, которые обычно никогда не отправляются на терминал, могут передаваться в файлы.
Конфигурационный файл
HTTPie поддерживает базовый файл конфигурации, который можно использовать для определения настроек по умолчанию. Они будут применяться ко всем вашим запросам. Файл следует сохранить в ~/.config/httpie/config.json
в Linux/Mac и в %APPDATA%httpieconfig.json
в Windows.
Поддерживается единственный ключ конфигурации, default_options
, который принимает базовый массив параметров для добавления к командам HTTPie, которые вы выполняете:
{ "default_options": [ "Authorization:foobar", "--pretty=none", "--style=monokai" ] }
Можно включить любой параметр, поддерживаемый интерфейсом командной строки HTTPie. Вы можете переопределить параметры по умолчанию, определяя их с новым значением каждый раз, когда вы запускаете HTTPie.
Заключение
HTTPie — это многофункциональный инструмент, который переносит HTTP API на ваш терминал. Это современная альтернатива основным продуктам Unix, таким как curl
, предназначенная для регулярного использования разработчиками и тестировщиками. Хотя синтаксис иногда может быть громоздким, в целом он выразителен и запоминается.
Стоит потратить время на чтение официальной документации, если вы хотите узнать больше о HTTPie. Вся разработка происходит открыто на GitHub, а поддержка предоставляется на Gitter и StackOverflow.