Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

5 неожиданных способов скачать файлы в терминале Linux без curl и wget — вы будете в шоке, как это просто!

Вас когда-нибудь ставили в ситуацию, где нельзя отправить обычный HTTP-запрос? Может понадобилось переустановить систему или собрать Docker-контейнер? Порой приходится работать с тем, что под рукой, а иногда просто хочется разобраться, как всё устроено изнутри. Я собрал для вас пять нестандартных способов скачивать файлы по HTTP прямо из терминала. Чтобы получить доступ к HTTP-ресурсам, обычно нужно сформировать специальный заголовок. В некоторых примерах ниже это придётся сделать вручную — но не переживайте, ничего сложного тут нет. HTTP-заголовок — это короткая текстовая инструкция, описывающая параметры соединения. Во всех примерах он будет выглядеть примерно так: Первой идёт строка запроса, она говорит серверу, что мы хотим получить ресурс по определённому пути. Этот «путь» начинается сразу после .com, .ru и прочих доменов, например: example.com/path/foo. В приведённом выше примере запроса мы обращаемся за основным документом example.com (путь — "/"). Теперь, когда вы познакомилис
Оглавление

Вас когда-нибудь ставили в ситуацию, где нельзя отправить обычный 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

-2

Команды для 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.

-3

Для работы через HTTPS используйте такую команду:

Хотя HTTPie рассчитан на разработчиков, пользоваться им приятно и просто, как обычным HTTP-клиентом — к тому же он отлично справляется с загрузкой файлов.

-4

В 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 — подробный гайд с лайфхаками и фишками.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: