Отправка сетевых запросов из командной строки
Centos, Debian, RHEL, Ubuntu | Комментировать запись
Сетевые запросы, запущенные из командной строки, бывают разных форм и размеров. Некоторые пользователи признают только 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: Linux, RedHat, Unix