Отправка сетевых запросов из командной строки

Сетевые запросы, запущенные из командной строки, бывают разных форм и размеров. Некоторые пользователи признают только curl, другие любят wget. Кому-то больше нравится пакет lwp-request, который предоставляет команды со знакомыми названиями GET, POST и HEAD. Команда HEAD довольно регулярно используется для устранения неполадок с заголовками, возвращаемыми серверами.

Требования

Команды, которые мы собираемся использовать, предоставляются пакетом lwp-request.

Рассматриваемый пакет написан на Perl и, как правило, входит в стандартную комплектацию многих дистрибутивов Linux, а также других Unix-подобных операционных систем, таких как macOS.

Команду lwp-request можно вызвать напрямую с рядом аргументов, но для простоты мы рассмотрим вспомогательные сценарии, которые она поставляет.

Если в вашей системе нет GET, POST и HEAD, вы, скорее всего, сможете установить пакет lwp-request при помощи вашего любимого менеджера пакетов.

В Ubuntu- и Debian-подобных системах вы можете установить этот пакет с помощью следующих команд:

sudo apt update
sudo apt install libwww-perl

В CentOS, Rocky Linux, Fedora и других производных от RedHat системах вы можете установить его с поддержкой URL-адресов HTTPS при помощи такой команды:

sudo dnf install perl-libwww-perl.noarch perl-LWP-Protocol-https.noarch

GET-запросы

Предположим, нам так понравился логотип Alligator.io, что мы решили загрузить его на локальную машину. Чтобы получить файл, вы можете просто запустить GET-запрос:

GET https://alligator.io/images/logo-fancy.svg

Согласно философии Unix, команда GET предназначена для выполнения одной задачи, а именно извлечение файла.

Предыдущий формат отлично подходит для проверки URL-адреса, если вы хотите увидеть, что возвращает веб-сервер. Но если вы действительно хотите загрузить этот прекрасный логотип, вы должны направить результат в файл:

GET https://alligator.io/images/logo-fancy.svg > logo-fancy.svg

Теперь у нас есть локальная копия логотипа Alligator.io.

POST-запросы

Команда GET позволяет нам получать файлы с удаленных серверов, в то время как POST – отправлять данные на сервер для обработки, а также возвращать их вывод.

По сути синтаксис POST такой же, как GET:

POST https://httpbin.org/post

Затем вам будет предложено ввести контент, который вы хотите отправить. Ожидаемая строка должна быть в формате строки запроса, который выглядит примерно так:

reptile=alligator&color=#008f68

Когда вы закончите вводить данные, просто нажмите CTRL-D, и контент будет опубликован. Сервис, в который вы отправляете сообщение, отразит запрос:

{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "color": "#008f68\n",
    "reptile": "alligator"
  },
  "headers": {
    "Content-Length": "32",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "lwp-request/6.39 libwww-perl/6.39"
  },
  "json": null,
  "origin": "203.0.113.5",
  "url": "https://httpbin.org/post"
}

HEAD-запросы

Как уже упоминалось, команда HEAD чрезвычайно полезна для отладки и устранения неполадок. С большой долей вероятности можно сказать, что она входит в пятерку самых популярных утилит командной строки.

Подобно GET и POST, синтаксис HEAD довольно прост:

HEAD http://alligator.io/

Эта команда вернет 200 OK, а также информацию о заголовках, возвращаемых веб-сервисом.

Команда HEAD по умолчанию дает информацию только о последней остановке в цепочке запросов. Чтобы увидеть все запросы, включая автоматический 301 Moved Permanently, передайте аргумент -S:

HEAD -S http://alligator.io/

Это дает нам немного больше информации:

HEAD http://alligator.io/
301 Moved Permanently
HEAD https://alligator.io/
200 OK
Cache-Control: public, max-age=0, must-revalidate
Connection: close
Date: Sat, 29 Jun 2019 00:49:18 GMT
Age: 1
ETag: "8b85849c835909679fc1ba80b307d144-ssl"
Server: Netlify
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Client-Date: Sat, 29 Jun 2019 00:49:18 GMT
Client-Peer: 203.0.113.1:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
Client-SSL-Cert-Subject: /CN=alligator.io
Client-SSL-Cipher: TLS_AES_256_GCM_SHA384
Client-SSL-Socket-Class: IO::Socket::SSL
Strict-Transport-Security: max-age=31536000
X-NF-Request-ID: 60babe56-c0ea-4658-aa5a-3e185f1e851f-10342

Цветной вывод

Однотонный вывод вас разочаровал? В таком случае для выполнения GET, POST и HEAD вы можете использовать псевдоним HTTP-команды HTTPie.

HTTPie может делать все, что делает библиотека lwp-request, с аналогичным синтаксисом, но с бонусом – она поддерживает цветной вывод.

В системах, производных от Ubuntu и Debian, установить HTTPie можно с помощью следующих команд:

sudo apt update
sudo apt install httpie

В дистрибутивах, производных от Centos, Rocky Linux, Fedora и RedHat, установить HTTPie помогут следующие команды, если у вас есть EPEL:

sudo dnf install epel-release
sudo dnf install httpie

Локальные псевдонимы команд выглядят так:

# HTTPie aliases
alias GET='http'
alias POST='http POST'
alias HEAD='http HEAD'

Заключение

В следующий раз, когда вам нужно будет сделать сетевой запрос к API или устранить неполадки с заголовками, возвращаемыми сервером, вы можете сделать это с помощью командной строки, оставив Postman и другие подобные инструменты без дела.

Также это позволяет полностью отказаться от браузера!

Читайте также: Создание интерактивных запросов командной строки

Tags: , ,

Добавить комментарий