Статьи

HTTPie, удобный для людей инструмент, похожий на cURL

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

Приведенный выше запрос дает следующий ответ:

HTTP-ответ

Это выглядит так, как будто HTTPie установлен и работает в вашей системе. Если вы посмотрите внимательно, цветной вывод приведенной выше команды показывает, что URL был перемещен навсегда на https://tutsplus.com . Следовательно, чтобы выполнить запрос GET для tutsplus, измените запрос:

1
http https://tutsplus.com

Приведенный выше запрос вернет HTML-вывод запроса GET по URL-адресу https://tutsplus.com .

Как видно из приведенного выше запроса, единственная информация, HTTPie необходима HTTPie для выполнения запроса, — это URL.

Прежде чем углубляться в команды 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 / .

По умолчанию, если 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 вместе с данными, которые будут опубликованы в 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 становится намного легче отправить форму через 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 , поэтому вам не нужно устанавливать его явно.

Как вы могли заметить в нашем предыдущем примере, по умолчанию HTTPie не обрабатывает перенаправления HTTP. Когда мы попытались выполнить запрос GET на сайте www.tutsplus.com , он показал сообщение о том, что URL был перемещен. Если вы хотите, чтобы HTTPie обрабатывал перенаправления, вам нужно добавить параметр под названием follow в команду запроса.

1
http —follow www.tutsplus.com

Вышеупомянутый запрос HTTPie будет обрабатывать перенаправления HTTP, если таковые имеются.

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&amp;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

Может быть трудно запомнить все команды, связанные с 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 должен отображаться следующий ответ.

Ответ команды GET

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