HTTPie-length-fixed
Часто при написании на Python веб-сервисов, предоставляющих REST API, хочется посмотреть, как сервис реагирует на различные HTTP-запросы. Конечно, можно мучиться с браузером или пользоваться curl, но когда интересующий запрос содержит нестандартные заголовки, тело в формате JSON, Cookie и прочее, длина командной строки для вызова curl становится устрашающей, а помнить нужные ключи вызова становится всё труднее.
На выручку спешит инструмент под названием HTTPie. Он легко устанавливается в популярных ОС, так как сам по себе написан на Python.
Синтаксис вызова HTTPie необычайно прост: устанавливаемый в систему бинарник называется http, командная строка для POST-запроса к API выглядит следующим образом:
http POST localhost:8080/api/method
Добавить в запрос дополнительный заголовок можно, дописав в конец строки название заголовка и через двоеточие — его значение, например,
HTTPie примечателен читаемостью вывода. В отличие от curl, он не вываливает в терминал массу информации о SSL-сертификате. Убер-фича HTTPie — выделение цветом не только всех заголовков, но и тела ответа в соответствии с типом полученного документа, да ещё и корректная идентация тела ответа — JSON, слепленный сервером в одну длинную неудобочитаемую строку, превращается в красоту на прикреплённом скриншоте. К слову о SSL, если вы тестируете ваш веб-сервис у себя на localhost с самоподписанным сертификатом, заставить HTTPie не проверять его валидность можно ключом --verify=no.
HTTPie способен "понимать" JSON не только в теле ответа, но и в качестве входных данных: передадим нашему API POST-запрос с телом, в котором находится JSON-объект с именем пользователя:
http POST localhost:8080/api/register first_name=Vasya last_name=Pupkin
Также можно записать JSON-представление объекта в простой текстовый файл и передать его на стандартный ввод HTTPie следующим образом:
http POST localhost:8080/api/register < vasya.txt
Комбинирование HTTPie с оператором перенаправления ввода-вывода | открывает богатые возможности его использования в скриптах в неинтерактивном режиме.