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 последних уроков рубрики "Разное"

^ Наверх ^