Выполняйте HTTP-запросы без curl

Возможно, вам придется работать на сервере без curl или wget. Вам нужно протестировать эндпоинт, но этих инструментов нет под рукой. Вы можете использовать Bash для отправки HTTP-запросов напрямую.

В Bash есть скрытая функция под названием /dev/tcp. Это не настоящий файл, а специальное устройство, которое понимает Bash. Когда вы записываете данные в /dev/tcp/hostname/port, Bash открывает для вас TCP-соединение.

Как это работает:

Для управления файловыми дескрипторами используется команда exec. Например, вы можете открыть файловый дескриптор 3 для чтения и записи.

Синтаксис выглядит так: exec 3<>/dev/tcp/example.com/80

Как только соединение установлено, вы можете отправлять в него данные, а также считывать их. Этот метод позволяет увидеть, как протокол HTTP работает на низком уровне.

Как сделать GET-запрос:

Чтобы получить данные, необходимо отправить правильные заголовки. В конце запроса должна быть пустая строка, сигнализирующая о его завершении.

Выполните следующие шаги:

Пример скрипта:

HOST="example.com"
PORT=80
REQUEST_PATH="/"
exec 3<>/dev/tcp/${HOST}/${PORT}
printf "GET ${REQUEST_PATH} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
cat <&3
exec 3>&-

Эта техника помогает понять, как клиенты и серверы взаимодействуют друг с другом. Это полезный навык для отладки в минималистичных системах.

Источник: https://dev.to/kelvin_kariuki_20f4bec616/developer-take-on-til-you-can-make-http-requests-without-curl-using-bash-devtcp-578k