Виконуйте HTTP-запити без curl

Ви можете працювати на сервері, де немає curl або wget. Вам потрібно протестувати endpoint, але ці інструменти відсутні. Ви можете використовувати 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