Ошибка 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
Неподдерживаемые протоколы и типы ссылок
Отдельная категория случаев — ссылки, которые принципиально не предназначены для wget. Утилита не работает с торрент-протоколом, поэтому magnet-ссылки необходимо передавать торрент-клиенту. Адреса вида file:// указывают на локальные файлы — их копируют обычной командой cp, а не скачивают.
Похожая ситуация с SFTP и SSH: для них существуют собственные инструменты — scp, sftp, rsync. Если источник файла доступен только по SSH, wget не поможет, и ошибка о неподдерживаемом URL в этом случае абсолютно корректна.
Ошибка в скриптах и переменных
Когда 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]" и проверьте её содержимое.