Прокси для Wget: настройка через HTTP, HTTPS и SOCKS5 в Linux, macOS и Windows

Чтобы GNU Wget скачивал через посредника, достаточно указать ему адрес в http_proxy и https_proxy: как переменную оболочки, строкой конфига .wgetrc или ключом -e в самой команде. Логин с паролем указываются либо прямо в URL прокси, либо отдельно через --proxy-user и --proxy-password. Есть и важная оговорка: с посредником Wget общается исключительно по HTTP, так что SOCKS5-серверу понадобится обёртка — например, proxychains-ng.
Ниже — все способы настройки, от разовой команды до постоянного конфига, а также авторизация, HTTPS-сайты через прокси, обходной путь для SOCKS5, быстрая проверка IP и разбор типичных ошибок. Начнём с короткой памятки по основным командам скачивания: параметры прокси комбинируются именно с ними.
Прокси для консольных утилит
HTTP- и SOCKS5-прокси с логином и паролем, которые работают в wget и curl
Основы Wget за две минуты
Wget — неинтерактивный загрузчик: он скачивает файлы и целые страницы по HTTP, HTTPS и FTP и продолжает работу, даже если терминал закрыт. В большинстве дистрибутивов Linux он уже установлен; в macOS ставится через Homebrew (brew install wget), в Windows — нативная сборка из менеджера пакетов, например Chocolatey или Scoop.
| Задача | Команда |
|---|---|
| Скачать файл под исходным именем | wget https://example.com/report.pdf |
| Сохранить под другим именем | wget -O latest.pdf https://example.com/report.pdf |
| Докачать прерванную загрузку | wget -c https://example.com/big.iso |
| Скачать все адреса из списка | wget -i urls.txt |
| Сохранить страницу с картинками и CSS для офлайн-чтения | wget -p -k https://example.com/article |
| Зеркалировать раздел сайта | wget --mirror -np -k -p https://example.com/docs/ |
| Не нагружать сервер | wget --wait=2 --random-wait --limit-rate=500k ... |
| Вывести страницу в терминал | wget -qO- https://example.com |
При зеркалировании соблюдайте robots.txt (Wget учитывает его по умолчанию) и правила сайта, а темп держите низким с помощью --wait.
Способ 1. Прокси для одной команды
Параметр -e выполняет инструкцию из .wgetrc прямо в командной строке, поэтому за пределами этого запуска ничего не меняется:
wget -e use_proxy=on \
-e http_proxy=http://203.0.113.24:8000 \
-e https_proxy=http://203.0.113.24:8000 \
https://example.com/data.jsonНужны обе переменные: Wget выбирает прокси по схеме целевого адреса — http_proxy для обычных HTTP-ссылок, https_proxy для HTTPS. Сам прокси в обоих случаях доступен по обычному HTTP: для HTTPS-сайта Wget просит прокси открыть туннель CONNECT и проводит через него TLS, так что содержимое страницы прокси не видит. Чем отличаются HTTP- и HTTPS-прокси, разобрано в отдельной статье.
Способ 2. Экспорт переменных
Для всей текущей сессии терминала достаточно один раз выполнить export:
export http_proxy="http://203.0.113.24:8000"
export https_proxy="$http_proxy"
export no_proxy="localhost,127.0.0.1,.office.lan"
wget -qO- https://api.ipify.org; echoWget читает имена в нижнем регистре, ими и пользуйтесь. В no_proxy перечисляются узлы, которые должны идти напрямую, — имена или суффиксы доменов через запятую. Чтобы настройки сохранялись между сессиями, добавьте строки export в ~/.bashrc или ~/.zshrc, помня, что те же переменные читают curl и менеджеры пакетов.
Когда переменные уже выставлены, а конкретную загрузку нужно провести напрямую, допишите к ней ключ --no-proxy, и этот запуск обойдёт посредника.
Способ 3. Постоянный файл .wgetrc
Файл конфигурации действует только на Wget и не засоряет окружение оболочки. Пользовательские настройки лежат в ~/.wgetrc, общесистемные — в /etc/wgetrc или /usr/local/etc/wgetrc в зависимости от сборки. Можно указать и любой другой файл через переменную окружения WGETRC — в Windows это самый простой путь.
# ~/.wgetrc
use_proxy = on
https_proxy = http://203.0.113.24:8000/
http_proxy = http://203.0.113.24:8000/
proxy_user = user-7f3k
proxy_password = ваш-пароль
no_proxy = localhost,127.0.0.1Раз пароль хранится без шифрования, права на файл стоит ограничить командой chmod 600 ~/.wgetrc. Чтобы на время отказаться от прокси, замените значение use_proxy на off и ничего больше не удаляйте.

Порядок приоритета простой: параметры командной строки перекрывают .wgetrc, а явные -e или --proxy-user важнее всего остального.
Авторизация на прокси
Передать логин и пароль в Wget можно двумя равноценными способами.
В адресе прокси. Логин и пароль ставятся перед хостом, например http://user-7f3k:ваш-пароль@203.0.113.24:8000. Символы, имеющие особый смысл в URL, — @, : или # — нужно закодировать, например @ превращается в %40.
Отдельными параметрами — так кодировать ничего не нужно:
wget --proxy-user=user-7f3k --proxy-password='ваш-пароль' \
-e https_proxy=http://203.0.113.24:8000 \
https://example.com/file.zipПароль, набранный в командной строке, попадает в историю оболочки и виден другим пользователям машины в списке процессов. На общих серверах лучше использовать .wgetrc с закрытыми правами или прокси с авторизацией по IP, где пароль не нужен вовсе.
Wget и SOCKS5: обходной путь
В GNU Wget 1.x поддержки SOCKS нет, и в документации Wget2 такой опции тоже не значится. Поэтому настройка вида http_proxy=socks5://... не работает. Практических обходных путей три; чем отличаются протоколы, объясняет сравнение SOCKS5 и HTTP-прокси.

Вариант 1. proxychains-ng
Про устройство протокола можно прочитать в статье что такое SOCKS5-прокси. proxychains-ng перехватывает сетевые вызовы динамически собранной программы и отправляет их через прокси из своего конфига. Установите пакет proxychains4 (Debian и Ubuntu) или proxychains-ng (Homebrew, Arch) и создайте личный конфиг:
# ~/.proxychains/proxychains.conf
strict_chain
proxy_dns
tcp_connect_time_out 8000
tcp_read_time_out 15000
[ProxyList]
socks5 203.0.113.24 1080 user-7f3k ваш-парольЗапустите Wget через него:
proxychains4 -q -f ~/.proxychains/proxychains.conf wget -qO- https://api.ipify.orgСтрока proxy_dns заставляет прокси самостоятельно разрешать имена хостов, и DNS-запросы не уходят с вашего подключения. proxychains работает через предзагрузку библиотек, поэтому не подходит для статически собранных программ, а в macOS для системных бинарников это ограничивает System Integrity Protection; Wget, установленный через Homebrew, обычно работает.
Вариант 2. tsocks и torsocks
tsocks — более старый инструмент того же типа, который много лет не обновляется, поэтому на современных системах берите proxychains-ng. torsocks создан специально для Tor и универсальным SOCKS5-клиентом не является.
Вариант 3. HTTP-порт или другой инструмент
Многие провайдеры отдают один и тот же выход по обоим протоколам. Если в тарифе есть HTTP-порт, направьте Wget на него и обойдитесь без прослоек; наши SOCKS5-прокси доступны в обоих вариантах. Для скриптов, которым нужен именно SOCKS5, подойдёт curl — он поддерживает его штатно через --socks5-hostname.
Проверьте, что Wget идёт через прокси
Выведите внешний адрес с прокси и без него и сравните:
wget -qO- --no-proxy https://api.ipify.org; echo
wget -qO- https://api.ipify.org; echoВторая строка должна показать IP прокси. Для подробностей wget -S выводит заголовки ответа, а в подробном режиме Wget пишет, к какому хосту подключается, — там виден адрес прокси.
Частые ошибки и их решение
| Сообщение | Что означает | Что делать |
|---|---|---|
Proxy tunneling failed: Proxy Authentication Required | Прокси не открыл туннель CONNECT без верных учётных данных | Проверьте логин и пароль, закодируйте спецсимволы |
407 Proxy Authentication Required | То же для HTTP-адреса | Добавьте --proxy-user и --proxy-password |
Connecting to 203.0.113.24:8000... failed: Connection refused | Неверный порт или прокси не работает | Сверьте порт в панели провайдера |
Unable to establish SSL connection | Туннель оборвался, часто после ошибки авторизации | Сначала исправьте авторизацию; не отключайте проверку сертификатов |
| Запрос идёт напрямую | Переменные в верхнем регистре или use_proxy = off | Используйте имена в нижнем регистре, проверьте .wgetrc |
Error parsing proxy URL ... Unsupported scheme | Указан адрес socks5, а SOCKS Wget не поддерживает | Используйте proxychains-ng или HTTP-порт |
Параметр --no-check-certificate глушит ошибки TLS, но вместе с ними убирает защиту от перехвата. Применяйте его только для известного тестового хоста и никогда — как «лекарство» от проблем с прокси.
Особенности Windows
В Windows PowerShell 5.1 команда wget по умолчанию перенаправляется на Invoke-WebRequest — это другой инструмент с собственными ключами. Пишите wget.exe полностью — так гарантированно запустится утилита GNU. Переменные прокси работают так же: $env:https_proxy = "http://203.0.113.24:8000" в PowerShell или set https_proxy=http://203.0.113.24:8000 в cmd. Файл конфигурации можно положить в любую папку и указать путь к нему в WGETRC.
Для больших загрузок с множества адресов обычно быстрее и дешевле всего серверные прокси — если целевой сайт не фильтрует диапазоны хостингов.
Частые вопросы о wget и прокси
Поддерживает ли wget SOCKS5-прокси?
Нет. GNU Wget работает с прокси только по HTTP, поэтому пустите его через proxychains-ng, используйте HTTP-порт того же прокси или возьмите curl для задач с SOCKS5.
Почему wget не видит переменную HTTPS_PROXY?
Wget читает имена в нижнем регистре — https_proxy и http_proxy. Проверьте также, нет ли в .wgetrc строки use_proxy = off, которая отключает прокси независимо от окружения.
Как передать пароль со спецсимволами?
Либо закодируйте его в адресе прокси, либо передайте параметром --proxy-password в одинарных кавычках — тогда кодировать ничего не нужно.
Как сделать, чтобы wget обходил прокси для одного сайта?
Добавьте хост в no_proxy, например локальные адреса или суффикс внутреннего домена, либо допишите --no-proxy к конкретной команде.
Как узнать, с какого IP работает wget?
Выполните wget -qO- https://api.ipify.org с настроенным прокси и повторите ту же команду, добавив --no-proxy: адреса должны различаться.


