Блог Froxy | Новости, полезные статьи о использовании прокси

Гайд по использованию Wget с прокси-сервером

Written by Команда Froxy | 11.04.2024 10:00:00

Слабо «скачать интернет»? Конечно, это невозможно, у вас просто не хватит никаких носителей. Но у разработчиков бесплатного ПО с открытым исходным кодом всегда интересное чувство юмора. Простой пример – утилита wget. Её название расшифровывается как «www get», где WWW – это World Wide Web (Всемирная паутина, она же Интернет), а «get» переводится на русский как «получить» или «скачать». Вот и получается «скачать Интернет».

Но речь в материале ниже пойдёт не столько о самой утилите, сколько о том, как заставить её работать через прокси. Обычно это нужно для организации многопоточных соединений и операций парсинга.

Ранее мы уже рассказывали об аналогичной утилите – о cURL (она вполне успешно сочетается с прокси при умелом подходе). Поэтому ниже дополнительно сравним обе утилиты и расскажем об их отличиях.

Что такое wget и как его использовать

Wget – это штатная утилита командной строки, которая поставляется в комплекте практически всех популярных дистрибутивов Linux, она предназначена для быстрого скачивания файлов и другого контента по различным интернет-протоколам.

При желании утилиту можно установить и использовать на других платформах, так как программа имеет открытый исходный код, который может быть скомпилирован для разных сред исполнения.

Wget может похвастаться очень простым синтаксисом и потому идеально подходит для повседневного использования, в том числе для новичков. Благодаря тому, что wget поставляется в базовом окружении Linux-сборок, с её помощью можно быстро и просто скачивать другие программы и пакеты, а также включать в задания планировщика cron (скрипты и команды, выполняемые по расписанию). Плюс, wget можно включить в состав любых других скриптов и консольных команд.

Например, с помощью wget можно полностью скачать целевой сайт, если правильно выставить опции обхода URL-адресов (с рекурсией).

Wget поддерживает работу с HTTP, HTTPS, FTP и FTPS-протоколами (+ с некоторыми другими, менее популярными).

Более правильное название – GNU Wget (официальный сайт и документация).

Обратите внимание, существует параллельная реализация wget – wget2. Она имеет ряд небольших нововведений и особенностей.

Пример использования wget для скачивания архива:

  • wget https://ваш.сайт/каталог/архив.zip

Файлы можно скачивать сразу большими партиями, достаточно указать все их имена (ссылки) через пробел:

  • wget https://ваш.сайт/каталог/архив1.zip https://ваш.сайт/каталог/архив2.zip https://ваш.сайт/каталог/архив3.zip

Утилита будет скачивать файлы последовательно с отображением прогресса прямо в консоли.

Имена целевых файлов (список URL-адресов) можно сохранить в отдельный документ и «скормить» такой документ wget:

  • wget --input-file=~/urls.txt

Или то же самое с сокращёнными опциями:

  • wget -i ~/urls.txt

Если доступ защищён логином и паролем, то wget тоже может справиться (пару user и password нужно заменить на актуальные):

  • wget ftp://user:password@host/path

Вот так можно создать локальную версию конкретного сайта (он будет скачан в виде HTML-страниц со всем связанным содержимым):

  • wget --mirror -p --convert-links -P /home/user/site111 исходный-сайт.com

С сайта можно скачать только файлы определённого типа:

  • wget -r -A “*.png” домен.зона

Обратите внимание! Wget не умеет работать с JavaScript, то есть утилита будет загружать и сохранять только стандартный HTML-код. Все динамически подгружаемые элементы будут проигнорированы.

Вариантов применения wget масса.

Полный список всех опций и ключей для утилиты можно найти в документации к программе, а также на официальном сайте. В частности, можно:

  • Ограничивать скорость загрузки и устанавливать другие квоты
  • Изменять user-agent на своё значение (например, можно представиться сайту браузером Chrome)
  • Возобновлять загрузку
  • Задавать смещение при чтении файла
  • Анализировать время создания/модификации, MIME-тип
  • Использовать постоянные и случайные задержки между запросами
  • Рекурсивно обходить указанные каталоги подкаталоги
  • Использовать сжатие на уровне web-сервера
  • Переключаться в фоновый режим
  • Задействовать прокси

Естественно, последний пункт нам наиболее интересен.

При парсинге wget вполне может помочь с сохранением HTML-содержимого, которое позже можно разобрать и проанализировать другими инструментами и скриптами. Подробнее смотрите в материалах про библиотеки для парсинга на Python и на языке Go.

Зачем использовать прокси с wget

Прокси – это сервер-посредник. Основная его задача – организация альтернативного маршрута при обмене запросами между клиентом и сервером.

Прокси могут использовать разные схемы подключения и разные технологии. Например, прокси могут быть анонимными и нет, работать на базе разных типов устройств (серверные, мобильные, резидентные), платные или бесплатные, с обратной связью (backconnect-прокси), со статическими или с динамическими адресами, и т.д.

Но какими бы они ни были, их задачи остаются примерно одними и теми же: переадресация, изменение местоположения, модификация содержимого (сжатие, очистка и т.п.).

При парсинге, а соответственно, и при использовании wget, прокси нужны для того, чтобы можно было скрыть реальный адрес владельца и организовать множественные параллельные подключения, например, чтобы ускорить процедуру сбора данных (скрапинг, не путать с web-краулингом).

Как установить wget

Во многих Linux-дистрибутивах wget является предустановленной утилитой. Если команда wget возвращает ошибку, то установить wget легко и просто можно с помощью штатного менеджера пакетов.

Debian-based дистрибутивы, включая Ubuntu:

  • sudo apt-get install wget

Fedora, CentOS и RHEL:

  • yum install wget

ArchLinux и аналоги:

  • pacman -Sy wget

В MacOS wget устанавливается либо из исходников (с командами make и make install), либо с помощью менеджера пакетов Homebrew. Для новичков последний вариант будет наиболее удобным (обратите внимание, используется утилита cURL, которая в MacOS предустановлена по умолчанию):

  • /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • brew install wget

В Windows последних версий (10 и 11) установка wget возможна в подсистеме Linux (WSL), напрямую из скомпилированных исходников (например, их можно найти здесь) или с помощью сторонних менеджеров пакетов, таких как Chocolatey. Команда установки для Chocolatey:

  • choco install wget

Если вы установите wget в Windows на уровне бинарного файла, то для правильного вызова апплета в командной строке нужно будет прописать ссылку на программу в переменной PATH. Иначе придётся каждый раз обращаться к файлу напрямую «.\каталог\wget.exe», а далее список опций и параметров.

Запуск wget

Когда утилита установлена, её можно запустить либо из командной строки, либо обратиться к ней на уровне shell-скриптов.

Типовой запуск:

  • wget https://сайт.зона/каталог/файл.zip

Сразу после нажатия ввода утилита начнёт скачивание файла в домашний каталог пользователя (или в иной каталог, в соответствии с настройками окружения).

Прямо в консоли wget показывает текущую скорость и общий прогресс скачивания.

Имя файла при загрузке можно изменить:

  • wget -O новое-название.zip https://сайт.зона/каталог/исходный-файл.zip

Если вам потребуется вызов справки по набору опций, напишите:

  • wget -h

Настройка wget для работы через прокси

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

  • Если прокси без необходимости авторизации:

wget -e use_proxy=on -e http_proxy=адрес.прокси.или.его.IP.адрес:порт https://целевой.сайт/каталог/файл.zip

  • Если требуется обязательная авторизация с логином и паролем:

wget -e use_proxy=on -e http_proxy=132.217.171.127:1234 --proxy-user=ЛОГИН --proxy-password=ПАРОЛЬ https://целевой.сайт/каталог/файл.zip

В некоторых случаях вместо опции «use_proxy=on» может использоваться комбинация «use_proxy=yes».

Если вам неудобно каждый раз прописывать опции в консоли, то можно добавить прокси на уровне конфигурационного файла. Сделать это можно либо в общем каталоге конфигов (/etc/wgetrc), либо в конфиге локального пользователя («~.wgetrc», если такого файла нет, то его можно создать вручную). Достаточно изменить опции на следующие (если пользовательский конфиг создаётся с нуля, то опции нужно просто добавить в пустой файл):

use_proxy=on

http_proxy=155.217.170.121:12345

https_proxy=155.217.170.121:12345

Естественно, вместо 155.217.170.121:12345 нужно указать актуальный IP-адрес и номер порта.

Если имеется привязка к авторизации с логином и паролем, то можно использовать следующую конструкцию:

use_proxy = on

http_proxy = http://ЛОГИН:ПАРОЛЬ@155.217.170.121:12345

Теперь можно запускать wget без дополнительных ключей, утилита постоянно будет работать через прокси.

Ротация прокси для wget

Встроенных инструментов для ротации прокси у wget нет. Поэтому, если вы хотите каждый новый экземпляр wget запускать через отдельный прокси, то нужно написать bash-скрипт или использовать опцию «-e».

Пример:

wget -e use_proxy=on -e http_proxy=104.254.41.36:1234 --proxy-user=ЛОГИН-один --proxy-password=ПАРОЛЬ-один https://сайт-один.зона/каталог/файл-один.zip

wget -e use_proxy=on -e http_proxy=26.104.52.225:2234 --proxy-user=ЛОГИН-два --proxy-password=ПАРОЛЬ-два https://сайт-два.зона/каталог/файл-два.zip

wget -e use_proxy=on -e http_proxy= 70.174.89.3:44444 --proxy-user=ЛОГИН-три --proxy-password=ПАРОЛЬ-три https://сайт-три.зона/каталог/файл-три.zip

А вот так может выглядеть вариант bash-скрипта принудительной ротации прокси в случайном порядке из списка, хранящегося в файле proxies.txt (условно 10 строк):

for i in {1..10}

do

proxy=$(shuf -n 1 proxies.txt)

wget -e use_proxy=on -e http_proxy=$proxy --proxy-user=ЛОГИН --proxy-password=ПАРОЛЬ https://целевой-сайт.зона/подкаталог/какой-то-файл

done

Если скрипты вы писать не умеете, то есть ещё один элегантный выход – использование прокси с обратной связью. На примере прокси Froxy:

  1. В личном кабинете настраивается порт (определяется локация и условия ротации выходных IP-адресов, например, при каждом новом запросе).
  2. Копируются данные прокси-порта (для wget это будет обычный прокси).
  3. Далее запросы выполняются по аналогии с обычным штучным прокси (wget -e use_proxy=on -e http_proxy=255.89.155.178:1234 --proxy-user=ЛОГИН --proxy-password=ПАРОЛЬ https://целевой.сайт/каталог/файл.zip).
  4. Ротация IP-адресов осуществляется на стороне провайдера прокси. При этом входной порт остаётся одним и тем же (ничего дополнительно во wget прописывать или обновлять не нужно).

cURL или wget

И cURL, и wget – утилиты с открытым исходным кодом, обе используются для загрузки файлов и другого контента по HTTP-протоколу и по FTP. Вполне неплохо справляются с отправкой HTTP-запросов POST и GET, cookies, умеют работать с защищёнными версиями сайтов (по протоколу HTTPS), их можно включать в свои bash-скрипты.

Но есть у них и отличия.

Начнём с cURL.

  • Это не только утилита, но и программная библиотека, которую можно задействовать на уровне кода.
  • В отличие от wget, cURL поддерживает огромное количество дополнительных протоколов (интересующимся подробная таблица сравнения).
  • cURL умеет работать через SOCKS-прокси (wget только через HTTP).
  • Здесь реализовано больше возможностей для авторизации на сайтах и для поддержки SSL-подключений.
  • Помимо POST и GET поддерживаются некоторые другие методы (например, PUT).

В противовес cURL wget тоже есть что предложить:

  • Возможна рекурсивная загрузка содержимого каталогов.
  • Доступно сохранение (создание) копий сайтов.
  • Прерванную загрузку можно возобновить (не нужно скачивать большие файлы заново).
  • Набор опций меньше, как следствие управление и настройка wget проще.

Наш материал о том, как cURL подружить с прокси.

Выводы и рекомендации

Wget – простая, но мощная утилита для скачивания файлов и HTML-страниц. Её вполне можно приспособить для задач парсинга. Обратиться к утилите можно в консоли или на уровне bash-скриптов. Из минусов – её невозможно задействовать как библиотеку. А ещё она не умеет самостоятельно ротировать прокси.

Найти качественные резидентные и мобильные прокси с автоматической ротацией можно в нашем сервисе. Froxy – это более 8 млн. IP-адресов, удобный интерфейс и таргетинг до уровня города (уверенное покрытие во всех странах мира). Оплачивается только трафик. Для тестирования возможностей есть специальный trial-пакет.