cURL — это часто используемый инструмент командной строки для выполнения HTTP-запросов. В этом руководстве мы рассмотрим HTTPie , инструмент командной строки для создания HTTP-запросов в удобной для человека форме. HTTPie использует команды с простым и естественным синтаксисом и отображает вывод в презентабельной форме.
HTTPie (произносится как aitch-tee-tee-pie ) является клиентом командной строки HTTP. Его цель — сделать взаимодействие CLI с веб-сервисами максимально удобным для человека. Он предоставляет простую команду
httpкоторая позволяет отправлять произвольные HTTP-запросы с использованием простого и естественного синтаксиса, и отображает цветной вывод. HTTPie можно использовать для тестирования, отладки и общего взаимодействия с HTTP-серверами.
Начиная
Чтобы начать работу с HTTPie на компьютере с Ubuntu, вам необходимо установить пакет с помощью apt-get.
| 
 1 
 | 
 sudo apt-get install httpie 
 | 
После установки у вас должен быть HTTPie в вашей системе. Попробуйте сделать запрос GET на любой сайт, используя HTTPie:
| 
 1 
 | 
 http www.tutsplus.com 
 | 
Приведенный выше запрос дает следующий ответ:

Это выглядит так, как будто HTTPie установлен и работает в вашей системе. Если вы посмотрите внимательно, цветной вывод приведенной выше команды показывает, что URL был перемещен навсегда на https://tutsplus.com . Следовательно, чтобы выполнить запрос GET для tutsplus, измените запрос:
| 
 1 
 | 
 http https://tutsplus.com 
 | 
Приведенный выше запрос вернет HTML-вывод запроса GET по URL-адресу https://tutsplus.com .
  Как видно из приведенного выше запроса, единственная информация, HTTPie необходима HTTPie для выполнения запроса, — это URL. 
Выполнение базовых запросов с использованием HTTPie
Прежде чем углубляться в команды HTTPie, мы посмотрим, как выполнять базовые запросы с использованием HTTPie. Мы будем использовать json-сервер, чтобы иметь фиктивный сервер для выполнения запросов. Чтобы начать работу с json-сервером, установите сервер, используя npm.
| 
 1 
 | 
 npm install -g json-server 
 | 
  Создайте файл с именем index.js который будет создавать случайные данные для нашего фиктивного сервера. 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
 | 
 // 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 
} 
 | 
  Запустите сервер json, используя файл index.js . 
| 
 1 
 | 
 json-server index.js 
 | 
Теперь сервер должен быть запущен по адресу http: // localhost: 3000 / .
Получить запрос с использованием HTTPie
  По умолчанию, если URL задан для HTTPie, он принимает тип запроса GET и выполняет соответственно.  Вот пример запроса GET : 
| 
 1 
 | 
 http http://localhost:3000/users 
 | 
Приведенный выше запрос отображает следующий вывод:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
 | 
 HTTP/1.1 200 OK 
Access-Control-Allow-Credentials: true 
Cache-Control: no-cache 
Connection: keep-alive 
Content-Length: 212 
Content-Type: application/json; 
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 с использованием HTTPie, нам нужно добавить ключевое слово POST вместе с данными, которые будут опубликованы в URL. Вот пример:
| 
 1 
 | 
 http POST http://localhost:3000/users id=007 name=RoyAgasthyan 
 | 
Команда отобразит следующий вывод на экране терминала:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
 HTTP/1.1 201 Created 
Access-Control-Allow-Credentials: true 
Cache-Control: no-cache 
Connection: keep-alive 
Content-Length: 43 
Content-Type: application/json; 
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
  Отправка формы — это еще один запрос, который обычно выполняется пользователем.  С HTTPie становится намного легче отправить форму через URL, указав параметр form как показано ниже: 
| 
 1 
 | 
 http —form POST www.yourformposturl.com name=’Roy’ 
 | 
  Когда вышеуказанная команда выполняется, Content-Type автоматически устанавливается на application/x-www-form-urlencoded; charset=utf-8  application/x-www-form-urlencoded; charset=utf-8 , поэтому вам не нужно устанавливать его явно. 
  Обработка HTTP перенаправления 
  Как вы могли заметить в нашем предыдущем примере, по умолчанию HTTPie не обрабатывает перенаправления HTTP.  Когда мы попытались выполнить запрос GET на сайте www.tutsplus.com , он показал сообщение о том, что URL был перемещен.  Если вы хотите, чтобы HTTPie обрабатывал перенаправления, вам нужно добавить параметр под названием follow в команду запроса. 
| 
 1 
 | 
 http —follow www.tutsplus.com 
 | 
Вышеупомянутый запрос HTTPie будет обрабатывать перенаправления HTTP, если таковые имеются.
Скачать файлы с помощью HTTPie
  HTTPie предоставляет возможность загрузки файлов с сервера, аналогично команде wget.  Чтобы загрузить файл, вам нужно указать опцию download вместе с URL. 
| 
 1 
 | 
 http —download http://www.tutorialspoint.com/python/python_tutorial.pdf 
 | 
Приведенная выше команда будет отображать ответ, как показано ниже:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
 | 
 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» 
 | 
 | 
Обработка аутентификации
  Доступ к URL-адресу веб-службы потребует того или иного вида аутентификации.  HTTPie поддерживает большинство распространенных механизмов аутентификации.  По умолчанию HTTPie поддерживает базовую аутентификацию, поэтому вам нужно только указать имя пользователя и пароль для запроса с параметром -a . 
| 
 1 
 | 
 http -a username:password www.mywebservice.com 
 | 
  Чтобы использовать дайджест-аутентификацию, вам нужно передать имя механизма аутентификации, используя опцию -A . 
| 
 1 
 | 
 http -A digest -a username:password www.myservice.com 
 | 
Настройка отображения ответа
  Когда мы делаем запрос к URL, все данные вместе с информацией заголовка отображаются в терминале.  HTTPie предоставляет возможность настроить выходной ответ.  Вы можете распечатать отдельный заголовок и информацию о теле, указав --header и --body вместе с запросом. 
| 
 1 
 | 
 http https://www.tutsplus.com —header 
 | 
Приведенная выше команда напечатает информацию заголовка, как показано:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
 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; 
Transfer-Encoding: chunked 
 | 
  Теперь, если вы попробуете HTTP-запрос вместе с параметром --body , он должен распечатать только часть тела. 
| 
 1 
 | 
 http www.google.com —body 
 | 
Приведенная выше команда выведет следующий вывод:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
 | 
 <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-запросов. Чтобы поддерживать сеанс, все, что нам нужно сделать, это создать именованный сеанс, как показано:
| 
 1 
 | 
 http —session=roy -a roy:mypass www.myservice.com 
 | 
  Приведенная выше команда создаст сеанс с именем roy который можно использовать для других запросов, используя имя сеанса.  Вот пример, который использует сессию roy : 
| 
 1 
 | 
 http —session=roy www.myservice.com 
 | 
Автозаполнение с использованием HTTP-запроса
  Может быть трудно запомнить все команды, связанные с HTTPie.  Инструментарий http-prompt предоставляет функцию автозаполнения, которую можно использовать вместе с HTTPie.  Чтобы начать работу с http-prompt , установите его с помощью pip : 
| 
 1 
 | 
 sudo pip install http-prompt 
 | 
  Чтобы начать сеанс, вызовите http-prompt с URL-адресом сервера, к которому мы будем обращаться.  Перезапустите json-server который мы установили, и вызовите http-prompt как показано: 
| 
 1 
 | 
 http-prompt http://localhost:3000/users 
 | 
Введите несколько букв HTTP, и автозаполнение должно появиться.

  Введите httpie и он должен отобразить URL, который мы запрашиваем. 
| 
 1 
 | 
 http http://localhost:3000/users 
 | 
  Все команды запроса HTTPie должны работать в http-prompt .  Попробуйте набрать в GET, и он должен появиться в автозаполнении.  При вводе команды GET должен отображаться следующий ответ. 

Завершение
  В этом уроке мы увидели, как начать работу с HTTPie , более HTTPie для человека альтернативой cURL.  Мы увидели, как выполнять базовые операции запроса, такие как GET и POST, используя HTTPie и некоторые другие функции.  Для получения более подробной информации об использовании HTTPie , посмотрите официальную документацию .  Также ознакомьтесь с официальной документацией по http-prompt .  Дайте нам знать ваши мысли в комментариях ниже.