HTTPie — удобный инструмент похожий на cURL
cURL — это самый известный инструмент для отправки HTTP запросов из командной строки. В этом уроке мы познакомим вас с более удобным аналогом, который называется HTTPie. HTTPie поддерживает простой и понятный синтаксис команд, а также должным образом осуществляет вывод результата.
HTTPie (произносится как эйч-ти-ти-пай) консольный HTTP клиент. Главное назначение: насколько это возможно облегчить работу со сторонними сервисами через CLI. В арсенале данного инструмента есть команда http, которая предназначена для отправки HTTP запросов, используя простой и понятный синтаксис, а также вывод окрашенного результата. HTTPie можно задействовать в тестировании, отладке и любом другом взаимодействии с HTTP серверами.
Начало работы с HTTPie
Для того чтобы начать работать с HTTPie на Ubuntu необходимо установить специальный пакет, используя apt-get.
sudo apt-get install httpie
После завершения процесса установки HTTPie будет доступен для запуска на вашей ОС. Для отправки GET запроса на любой сайт воспользуйтесь HTTPie командой:
http www.tutsplus.com
Результат вышеуказанной команды вернёт нам следующий результат:
Похоже, что HTTPie действительно внедрён в нашу ОС. Если внимательно проанализировать результат, то можно понять, что запрашиваемый URL перенаправляет запрос на https://tutsplus.com. Подкорректируем наш GET запрос:
http https://tutsplus.com
На этот раз результатом выполнения GET запроса будет HTML код запрашиваемого URL https://tutsplus.com.
Данный пример показывает нам, что для выполнения запроса HTTPie
достаточно будет указать только URL.
Выполнение обычных запросов, используя HTTPie
Перед тем как разобрать основные команды HTTPie давайте по-быстрому посмотрим как выполнять самые распространённые запросы. Воспользуемся инструментом json-server для создания фейкового сервера, к которому будем стучаться нашими запросами. Установить json-server можно через npm.
npm install -g json-server
Создайте файл index.js
и поместите туда фейковые данные.
// index.js module.exports = function() { var data = { users: [] } // Create 5 users for (var i = 0; i < 5; i++) { data.users.push({ id: i, name: 'user' + i }) } return data }
Запустите сервер, указав файл index.js
.
json-server index.js
Наш фейковый сервер должен быть доступен по адресу http://localhost:3000/.
Выполнение GET запросов, используя HTTPie
Любой HTTPie запрос с отсутствием параметров будет выполнен посредством отправки GET запроса. Пример GET
запроса:
http http://localhost:3000/users
В результате выполнения команды получим следующий результат:
HTTP/1.1 200 OK Access-Control-Allow-Credentials: true Cache-Control: no-cache Connection: keep-alive Content-Length: 212 Content-Type: application/json; charset=utf-8 Date: Tue, 18 Oct 2016 03:40:15 GMT ETag: W/"d4-4+4+bS4GA0+D/tDXlF8voQ" Expires: -1 Pragma: no-cache Vary: Origin, Accept-Encoding X-Content-Type-Options: nosniff X-Powered-By: Express [ { "id": 0, "name": "user0" }, { "id": 1, "name": "user1" }, { "id": 2, "name": "user2" }, { "id": 3, "name": "user3" }, { "id": 4, "name": "user4" } ]
Выполнение POST запросов, используя HTTPie
Для отправки POST запроса, нам необходимо указать ключевое слово POST перед URL. Пример:
http POST http://localhost:3000/users id=007 name=RoyAgasthyan
В результате выполнения команды получим следующий результат:
HTTP/1.1 201 Created Access-Control-Allow-Credentials: true Cache-Control: no-cache Connection: keep-alive Content-Length: 43 Content-Type: application/json; charset=utf-8 Date: Tue, 18 Oct 2016 03:46:22 GMT ETag: W/"2b-mpj//lkYJiGiWBB42OLoKA" Expires: -1 Pragma: no-cache Vary: Origin, X-HTTP-Method-Override, Accept-Encoding X-Content-Type-Options: nosniff X-Powered-By: Express { "id": "007", "name": "RoyAgasthyan" }
Теперь если снова выполнить GET запрос, то получим список пользователей, включая только что вставленные данные.
Отправка форм, используя HTTPie
Частенько пользователю приходится заполнять формы. HTTPie в значительной мере упрощает данную задачу. Просто добавьте флаг form
:
http --form POST www.yourformposturl.com name='Roy'
В результате выполнения данной команды, значение заголовка запроса Content-Type
будет автоматически преобразовано в application/x-www-form-urlencoded; charset=utf-8
, так что об этом не стоит волноваться.
Обработка HTTP перенаправлений
Как видно из самого первого примера, по умолчанию HTTPie не следует HTTP перенаправлениям. Когда мы отправляли GET запрос на www.tutsplus.com, то увидели сообщение в котором говорилось, что URL ресурс был перемещён. Для того чтобы HTTPie всё же следовал по цепочке перенаправлений можете воспользоваться флагом follow
.
http --follow www.tutsplus.com
В этом случае HTTPie проследует по всей цепочке HTTP адресов.
Загрузка файлов, используя HTTPie
Загрузить файл с сервера через HTTPie так же просто как вызвать команду wget
. Чтобы скачать файл вам нужно указать параметр download перед URL.
http --download http://www.tutorialspoint.com/python/python_tutorial.pdf
В результате выполнения команды получим следующий результат:
HTTP/1.1 200 OK Accept-Ranges: bytes Access-Control-Allow-Headers: X-Requested-With Access-Control-Allow-Origin: * Content-Length: 3945951 Content-Type: application/pdf Date: Tue, 18 Oct 2016 04:01:43 GMT Etag: "3c35df-52fe21b892a6f" Last-Modified: Thu, 07 Apr 2016 09:57:34 GMT Server: ECS (pnq/AF9A) X-Cache: HIT Downloading 3.76 MB to "python_tutorial.pdf-1" | 28.03 % 1.05 MB 63.85 kB/s 0:00:43 ETA
Работа с аутентификацией
Доступ к некоторым URL потребует осуществить аутентификацию. HTTPie поддерживает целый ряд возможных механизмов. По умолчанию HTTPie отработает обычную аутентификацию, поэтому после параметра -a нужно передать только имя пользователя и пароль.
http -a username:password www.mywebservice.com
Для осуществления дайджест-аутентификации необходимо добавить соответствующую запись перед параметром -A
.
http -A digest -a username:password www.myservice.com
Настройка формата вывода результатов
Любой запрос повлечёт за собой вывод полного ответа в командную строку. HTTPie позволяет настроить формат вывода результатов. Вы можете вывести заголовки или тело ответа, воспользовавшись параметрами --header
и --body
.
http https://www.tutsplus.com --header
После выполнения данной команды мы увидим только заголовки:
HTTP/1.1 301 Moved Permanently CF-RAY: 2f6669f88fc43548-LHR Connection: keep-alive Date: Sun, 23 Oct 2016 16:02:32 GMT Location: https://tutsplus.com/ Server: cloudflare-nginx Set-Cookie: __cfduid=dfea480f2567e7c463e66999adfdc73d71477238552; expires=Mon, 23-Oct-17 16:02:32 GMT; path=/; domain=.tutsplus.com; HttpOnly Transfer-Encoding: chunked
Если же выполнить HTTP запрос с параметром --body
, то будет осуществлён вывод “тела” ответа.
http www.google.com --body
Результат выполнения вышеуказанной команды:
<HTML> <HEAD> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE> </HEAD> <BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.in/?gfe_rd=cr&ei=OBwQWPO7Juyq8wf13bzYBw">here</A>. </BODY> </HTML>
Работа с сессиями
HTTPie позволяет осуществлять запросы, которые зависят друг от друга. Мы можем сохранить данные сессии, которые пригодятся для выполнения других HTTP запросов. Для работы с сессионными данным нужно указать название хранилища как это показано ниже:
http --session=roy -a roy:mypass www.myservice.com
В результате будет создана сессия с названием roy
, которую можно задействовать для выполнения других запросов. Пример использования сессии roy
:
http --session=roy www.myservice.com
Работа с автоподстановкой
Трудно запомнить все команды, которые доступны в HTTPie. К счастью вы можете установить инструмент http-prompt
, который позволяет выбирать различные HTTPie команды из выпадающего списка. Установим http-prompt
через pip
:
sudo pip install http-prompt
Запустите http-prompt
, указав URL сервера к которому мы будем стучаться. Перезапустите json-server
и стартаните http-prompt
как показано ниже:
http-prompt http://localhost:3000/users
Введите несколько символов в HTTP, и автоподстановка проявиться.
После ввода httpie
должен высветиться запрашиваемый URL.
http http://localhost:3000/users
Все запросы, доступные в HTTPie должны поддерживаться инструментом http-prompt
. Введите слово GET и получите все возможные результаты автоподстановки. Пример подсказки при вводе слова GET:
Подытожим
В этом уроке мы показали как организовать работу с более удобной альтернативой cURL — программой HTTPie
. Нами были рассмотрены такие приёмы как выполнение обычных запросов типа GET и POST, а также множество других тем. Для более подробной информации по работе HTTPie
читайте официальную документацию. Так же не забудьте посетить официальный мануал инструмента http-prompt
. И конечно же, оставляйте свои мысли в комментариях.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: https://code.tutsplus.com/tutorials/httpie-a-human-friendly-curl-like-tool--cms-27310
Перевел: Станислав Протасевич
Урок создан: 16 Апреля 2017
Просмотров: 8362
Правила перепечатки
5 последних уроков рубрики "Разное"
-
Как выбрать хороший хостинг для своего сайта?
Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.
-
Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг - это будущее Ваших сайтов
Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.
-
Разработка веб-сайтов с помощью онлайн платформы Wrike
Создание вебсайта - процесс трудоёмкий, требующий слаженного взаимодействия между заказчиком и исполнителем, а также между всеми членами коллектива, вовлечёнными в проект. И в этом очень хорошее подспорье окажет онлайн платформа Wrike.
-
20 ресурсов для прототипирования
Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.
-
Топ 10 бесплатных хостингов
Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.