Ошибка wget «not an http or ftp url»: причины и способы исправления

Ошибка wget: not an http or ftp url появляется сразу после запуска команды и означает, что wget не смог распознать переданный адрес как ссылку на протокол HTTP или FTP — загрузка даже не начинается. Чаще всего причина кроется в самой строке URL: опечатка в схеме протокола, лишние пробелы, потерянные кавычки или ссылка, скопированная не полностью.

Утилита wget работает только с протоколами HTTP, HTTPS и FTP. Любой другой формат адреса — magnet-ссылка, путь к локальному файлу, data-URI или адрес без указания схемы в некоторых сборках — вызывает именно это сообщение. Ниже разберём все типовые причины и пошаговые способы их устранения.

Что означает это сообщение

Перед началом загрузки wget разбирает переданную строку и проверяет схему — часть адреса до двоеточия. Если схема отсутствует, содержит недопустимые символы или указывает на неподдерживаемый протокол, парсер завершает работу с ошибкой «not an http or ftp url», и сетевое соединение даже не устанавливается.

Важно понимать: это не сетевая ошибка. Сервер тут ни при чём — проблема находится на стороне клиента, в самой команде. Поэтому проверку следует начинать не с интернет-соединения, а с точного вида URL, который вы передали утилите.

Основные причины ошибки

На практике список причин ограничен. Проверьте команду по следующим пунктам — в подавляющем большинстве случаев виновник находится среди них:

  • 🔍 Отсутствует схема протокола — адрес указан как example.com/file.zip без http:// или https://.
  • ✂️ URL обрезан при копировании — ссылка из браузера или терминала скопировалась не полностью.
  • 📝 Пробелы и спецсимволы без кавычек — амперсанд & в параметрах ссылки заставляет shell разбить команду на части.
  • 🔗 Неподдерживаемый протокол — передана magnet-ссылка, file://, sftp:// или ftp://-адрес с опечаткой.
  • 📄 Ссылка ведёт на страницу, а не на файл — само по себе это не вызывает данную ошибку, но в связке с редиректами и скриптами ситуация усложняется.
⚠️ Внимание: символ & в незаключённом в кавычки URL интерпретируется оболочкой как команда фонового запуска. В результате wget получает только часть адреса до амперсанда — и отклоняет её.

Проверка и исправление URL

Первое действие — вывести адрес на экран и внимательно осмотреть его. Выполните в терминале простую проверку, подставив свою ссылку:

echo "https://example.com/path/file.zip"

Убедитесь, что строка начинается с http://, https:// или ftp://, не содержит пробелов в середине и заканчивается там, где заканчивается реальная ссылка. Если адрес содержит параметры после знака ?, обязательно оберните его в кавычки:

wget "https://example.com/download?id=123&token=abc"

Если схема отсутствует, добавьте её вручную. Современные сайты почти всегда работают по HTTPS, поэтому безопасный вариант — начать с https://. Если сервер не поддерживает защищённое соединение, wget сообщит об этом отдельной ошибкой, и тогда можно переключиться на http://.

☑️ Проверка URL перед запуском wget

Выполнено: 0 / 5

Неподдерживаемые протоколы и типы ссылок

Отдельная категория случаев — ссылки, которые принципиально не предназначены для wget. Утилита не работает с торрент-протоколом, поэтому magnet-ссылки необходимо передавать торрент-клиенту. Адреса вида file:// указывают на локальные файлы — их копируют обычной командой cp, а не скачивают.

Похожая ситуация с SFTP и SSH: для них существуют собственные инструменты — scp, sftp, rsync. Если источник файла доступен только по SSH, wget не поможет, и ошибка о неподдерживаемом URL в этом случае абсолютно корректна.

📊 Где вы столкнулись с ошибкой «not an http or ftp url»?
При копировании ссылки из браузера
В bash-скрипте автоматизации
При загрузке с облачного хранилища
В Dockerfile или CI/CD-сборке

Ошибка в скриптах и переменных

Когда URL передаётся через переменную, источник проблемы бывает скрыт. Типичный сценарий — переменная пуста или содержит лишние кавычки, и wget получает мусор вместо адреса. Добавьте диагностический вывод перед вызовом:

URL="https://example.com/file.zip"

echo "Загружаем: [$URL]"

wget "$URL"

Квадратные скобки вокруг переменной помогают увидеть невидимые пробелы и переносы строк. Если адрес читается из файла, возможна другая ловушка — файл сохранён с Windows-окончаниями строк (CRLF), и невидимый символ \r приклеивается к концу URL. Очистить его можно так:

URL=$(tr -d '\r' < url.txt)
⚠️ Внимание: если ссылка формируется конкатенацией строк в скрипте, проверьте, что между частями не затесался пробел или перевод строки. Один лишний пробел внутри URL — и парсер wget отклонит адрес.

Сравнение типовых ситуаций

Сводная таблица поможет быстро сопоставить вид ссылки с причиной отказа:

Вид переданного адресаРеакция wgetРешение
example.com/file.zipОшибка разбора URLДобавить https:// в начало
https://site.com/dl?a=1&b=2 без кавычекURL обрезан по &Заключить адрес в кавычки
magnet:?xt=...Неподдерживаемая схемаИспользовать торрент-клиент
file:///home/user/doc.pdfНеподдерживаемая схемаКопировать через cp
URL из файла с CRLFОшибка из-за скрытого \rУдалить \r через tr -d '\r'
Почему curl иногда «съедает» такие ссылки

Curl более лоялен к формату адреса и для некоторых строк без схемы подставляет протокол автоматически. Wget ведёт себя строже и требует корректный URL. Это не делает одну утилиту хуже другой — просто у них разная логика разбора аргументов.

Альтернативные способы загрузки

Если разобраться с адресом не удаётся, есть обходные пути. Попробуйте передать ссылку утилите curl — её парсер иногда принимает адреса, которые wget отклоняет:

curl -O "https://example.com/file.zip"

Для ссылок, которые браузер открывает нормально, но wget отвергает, полезно скопировать адрес заново: кликните правой кнопкой по кнопке скачивания и выберите «Копировать адрес ссылки». Адрес из адресной строки и фактическая ссылка на файл могут отличаться.

Если файл раздаётся через торрент или доступен только по SSH, подберите правильный инструмент вместо попыток «заставить» wget принять чужеродную схему — это быстрее и надёжнее.

Часто задаваемые вопросы

Почему wget выдаёт ошибку, хотя ссылка открывается в браузере?

Браузер автоматически подставляет схему https:// и корректно обрабатывает спецсимволы, а wget требует строгого формата. Скопируйте полный адрес из адресной строки вместе с протоколом и заключите его в кавычки.

Может ли ошибка возникать из-за проблем с сетью или сервером?

Нет. Сообщение «not an http or ftp url» генерируется на этапе разбора адреса, до установки соединения. Сетевые сбои выдают другие ошибки — таймауты, отказ в соединении, ошибки DNS.

Как передать wget ссылку с пробелами в имени файла?

Пробелы в URL должны быть закодированы как %20, а вся ссылка — заключена в кавычки. Если сервер отдаёт адрес с «сырыми» пробелами, замените их вручную на %20 перед запуском.

Поддерживает ли wget протоколы SFTP или magnet?

Нет. Wget работает только с HTTP, HTTPS и FTP. Для SFTP используйте scp или sftp, для magnet-ссылок — торрент-клиент.

Ошибка появляется в bash-скрипте, хотя та же команда работает в терминале. Почему?

Вероятные причины — пустая переменная с URL, лишние кавычки внутри значения или символы \r от Windows-формата строк в файле скрипта. Выведите переменную через echo "[$URL]" и проверьте её содержимое.