Вас когда-нибудь ставили в ситуацию, где нельзя отправить обычный HTTP-запрос? Может понадобилось переустановить систему или собрать Docker-контейнер? Порой приходится работать с тем, что под рукой, а иногда просто хочется разобраться, как всё устроено изнутри. Я собрал для вас пять нестандартных способов скачивать файлы по HTTP прямо из терминала.
Для начала — что такое HTTP-заголовок и зачем он нужен
Чтобы получить доступ к HTTP-ресурсам, обычно нужно сформировать специальный заголовок. В некоторых примерах ниже это придётся сделать вручную — но не переживайте, ничего сложного тут нет.
HTTP-заголовок — это короткая текстовая инструкция, описывающая параметры соединения. Во всех примерах он будет выглядеть примерно так:
Первой идёт строка запроса, она говорит серверу, что мы хотим получить ресурс по определённому пути. Этот «путь» начинается сразу после .com, .ru и прочих доменов, например: example.com/path/foo.
В приведённом выше примере запроса мы обращаемся за основным документом example.com (путь — "/"). Теперь, когда вы познакомились с заголовками, можете попробовать следующие команды с этим описанием.
Telnet: спасает, когда нужен простой незашифрованный HTTP
Следующая команда может показаться необычной: здесь HTTP-заголовок формируется вручную, ведь Telnet — не настоящий HTTP-клиент. Квадратные скобки создают подкоманду, а строки после точки с запятой выполняются по очереди и отправляются в Telnet по одной.
Если проделать нечто похожее в терминале, можно заметить, как grep обрабатывает каждую строку по отдельности:
Для Telnet это значит, что HTTP-заголовок уходит на сервер построчно. В конце отправляем пустую строку (echo), чтобы отметить конец заголовка, и ждём 1 секунду — даём серверу время на ответ. Если сервер отвечает не сразу — увеличьте задержку.
Telnet не поддерживает TLS/HTTPS — работает только с обычными, нешифрованными HTTP-запросами.
HTTP/1.0 всегда закрывает соединение после передачи данных, а HTTP/1.1 — только по требованию, поэтому в примере используется версия 1.0. Важно: для крупных файлов Telnet не подойдёт, а вот мелкие загрузки качает без проблем.
Установить Telnet в Fedora можно так:
В Debian и похожих системах используйте:
Для Arch Telnet отсутствует в стандартных репозиториях — зато можно воспользоваться PuTTY.
Netcat: надёжнее и удобнее Telnet
Команды для Netcat выглядят почти так же, как для Telnet, но тут HTTP-заголовок отправляется одним блоком. Как видно в примерах, каждая строка оканчивается символами "\r\n", а в конце добавляется двойной перевод строки — так сигнализируем о завершении заголовка.
Netcat и Ncat отлично работают с небольшими файлами, а вот крупные им даются с трудом — используйте их для быстрого скачивания мелочей.
Обычный HTTP
Netcat работает только с нешифрованным http, ssl или https он не поддерживает.
В Fedora Netcat устанавливается так:
В Debian и подобных дистрибутивах — следующей командой:
Под Arch ищите Netcat в extra-репозитории:
C поддержкой TLS
Если нужно соединение с помощью TLS, используйте ncat — это современная версия netcat из семейства Nmap. Ncat “понимает” как зашифрованные https, так и обычные http.
Для Fedora команда установки вот такая:
В Debian и похожих системах:
В Arch — ncat уже входит в пакет nmap, установить можно так:
Когда совсем ничего нет под рукой: выручит requests для Python
Следующий способ отлично подойдёт для скачивания файлов типа txt или html, но с бинарными файлами (картинки, архивы и пр.) так не получится.
Чтобы скачать, например, изображение или архив, используйте такой вариант:
Не забудьте заменить "output_file.zip" и ссылку на свои значения.
Обычно Python 3 и pip уже есть в системе, а библиотеку requests устанавливаем отдельно — через pip или системный пакетный менеджер.
Если нет прав администратора, pip позволяет поставить requests локально, в домашнюю папку, так:
В Fedora установите через пакетный менеджер:
Для Debian и подобных дистрибутивов:
Arch: команда такая:
HTTPie — простой инструмент, который затмит curl
HTTPie изначально придуман для тестирования REST API — разных веб-сервисов и простых API-сервисов. Вот пример простой команды для получения нужного HTML-документа с example.com:
HTTPie умеет многое, например, облегчает написание URL. Следующий пример подключается к локальному серверу на порту 3000:
Чтобы добавить параметры, просто используйте двойной знак равенства:
Получится такой адрес: http://httpbin.org/anything?foo=bar.
Для работы через HTTPS используйте такую команду:
Хотя HTTPie рассчитан на разработчиков, пользоваться им приятно и просто, как обычным HTTP-клиентом — к тому же он отлично справляется с загрузкой файлов.
В Fedora HTTPie устанавливается командой:
В Debian и подобных дистрибутивах:
Arch: вот нужная команда:
Aria2 — универсальный инструмент для всех файловых закачек в терминале
Aria2 — это настоящий “швейцарский нож” среди загрузчиков для терминала. Он поддерживает множество протоколов: HTTP, HTTPS, FTP, SFTP, BitTorrent, WebSocket и другие. Может ускорять загрузку благодаря параллельным соединениям. Для скачивания файла достаточно указать папку через "-d" и имя файла через "-o".
Aria2 с лёгкостью справляется с любой задачей — HTTP, HTTPS, HTML-документами и любыми файлами.
В Fedora установить aria2 можно командой:
В Debian и подобных системах:
В Arch достаточно выполнить:
Из-за ограничений работы с HTTP-протоколом Telnet и Netcat годятся только для загрузки небольших файлов (до нескольких килобайт). Чем больше файл, тем важнее пользоваться “настоящими” HTTP-клиентами — Python, HTTPie или aria2. Запомните: если приходится прописывать заголовки вручную — вы работаете не с полноценным клиентом.
На практике Telnet и Netcat выручат только в экстренных случаях, когда ничего другого нет — они нужны скорее для быстрых проверок и экспериментов с базовыми сетевыми механизмами.
Интересно узнать больше о Telnet? Посмотрите сравнение Telnet и SSH. Для Netcat у нас есть отдельная статья с его крутыми примерами. А для HTTPie — подробный гайд с лайфхаками и фишками.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru