Есть 3 linux команды:
1. Для http (порт 80) - telnet / ncat
2. Для https (порт 443) - openssl
Всего то нужно подключиться на нужный порт и передать данные:
0. (В случае ssl) осуществить обмен ключами и установить защищённое соединение.
1. Выбранный протокол (http 1.0 / 1.1 или 2.0).
2. Передать HTTP заголовки (см в Гугле).
3. Передать адрес ресурса (uri).
4. Передать метод запроса и, при необходимости, его тело.
В ответ ты получишь содержимое ресурса.
Аналогично, на python, можно добиться используя модуль socket (ssl для подключения на порт 443).
Есть лайфхак с заголовками - запустить ncat с параметром -l и подключиться браузером - получишь http заголовки.