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
. Дайте нам знать ваши мысли в комментариях ниже.