Поиск по сайту:

cURL и wget в Linux: в чем разница?


Резюме: команда wget предназначена в первую очередь для загрузки веб-страниц и веб-сайтов и, по сравнению с cURL, не поддерживает столько протоколов. cURL предназначен для удаленной передачи файлов всех видов, а не только для веб-сайтов, а также поддерживает дополнительные функции, такие как сжатие файлов.

Если вы спросите группу пользователей Linux, с помощью чего они скачивают файлы, одни скажут wget, а другие скажут cURL. В чем разница, и один лучше другого?

История wget и cURL

Еще в 1960-х годах правительственные исследователи начали объединять различные сети, что привело к появлению взаимосвязанных сетей сетей. Но рождение Интернета, каким мы его знаем, произошло 1 января 1983 года, когда был реализован протокол TCP/IP. Это было недостающее звено. Это позволило разрозненным компьютерам и сетям общаться с использованием общего стандарта.

В 1991 году ЦЕРН выпустил свое программное обеспечение для World Wide Web, которое они использовали внутри компании в течение нескольких лет. Интерес к этому визуальному наложению для Интернета был немедленным и широко распространенным. К концу 1994 года насчитывалось 10 000 веб-серверов и 10 миллионов пользователей.

Эти две вехи — Интернет и Всемирная паутина — представляют собой очень разные стороны подключения. Но они также имеют много одинаковых функций.

Связь означает именно это. Вы подключаетесь к какому-то удаленному устройству, например серверу. И вы подключаетесь к нему, потому что на нем есть что-то, что вам нужно или чего вы хотите. Но как получить этот удаленно размещенный ресурс на локальный компьютер из командной строки Linux?

В 1996 году появились две утилиты, позволяющие загружать удаленно размещенные ресурсы. Это wget, выпущенный в январе, и cURL, выпущенный в декабре. Оба они работают в командной строке Linux. Они оба подключаются к удаленным серверам и оба извлекают данные для вас.

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

Рассмотрим двух хирургов. Вы, вероятно, не хотите, чтобы хирург-офтальмолог делал вам операцию по шунтированию сердца, и при этом вы не хотите, чтобы кардиохирург делал вам операцию по удалению катаракты. Да, они оба высококвалифицированные медицинские работники, но это не значит, что они могут заменить друг друга.

То же самое верно для wget и cURL.

Сравнение wget и cURL

Буква «w» в команде wget указывает на ее предназначение. Его основная цель — загрузка веб-страниц или даже целых веб-сайтов. Его man страница описывает его как утилиту для загрузки файлов из Интернета с использованием протоколов HTTP, HTTPS и FTP.

Напротив, cURL работает с 26 протоколами, включая SCP, SFTP и SMSB, а также HTTPS. На его man странице сказано, что это инструмент для передачи данных на сервер или с него. Он не предназначен специально для работы с веб-сайтами. Он предназначен для взаимодействия с удаленными серверами с использованием любого из множества поддерживаемых интернет-протоколов.

Таким образом, wget преимущественно ориентирован на веб-сайты, в то время как cURL работает на более глубоком уровне, на уровне обычного интернета.

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

cURL позволяет вам взаимодействовать с удаленным сервером. Он может загружать файлы, а также извлекать их. cURL работает с прокси-серверами SOCKS4 и SOCKS5 и HTTPS для прокси-сервера. Он поддерживает автоматическую распаковку сжатых файлов в форматах GZIP, BROTLI и ZSTD. cURL также позволяет загружать несколько передач параллельно.

Перекрытие между ними заключается в том, что wget и cURL позволяют получать веб-страницы и использовать FTP-серверы.

Это лишь грубая метрика, но вы можете получить некоторое представление об относительных наборах функций двух инструментов, взглянув на длину их man страниц. На нашей тестовой машине справочная страница для wget состоит из 1433 строк. Страница man для cURL состоит из колоссальных 5296 строк.

Быстрый взгляд на wget

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

Просто используйте команду wget с URL-адресом веб-страницы или удаленного файла.

wget https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc

Файл извлекается и сохраняется на вашем компьютере с исходным именем.

Чтобы сохранить файл с новым именем, используйте параметр -O (выходной документ).

wget -O word-file-test.doc https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc

Полученный файл сохраняется с выбранным нами именем.

Не используйте параметр -O при получении веб-сайтов. Если вы это сделаете, все извлеченные файлы будут добавлены в один.

Чтобы получить весь веб-сайт, используйте параметр -m (зеркало) и URL-адрес домашней страницы веб-сайта. Вы также можете использовать --page-requisites, чтобы убедиться, что все вспомогательные файлы, необходимые для правильного отображения веб-страниц, также загружены. Параметр --convert-links корректирует ссылки в полученном файле, чтобы они указывали на правильные места назначения на вашем локальном компьютере, а не на внешние места на веб-сайте.

Быстрый взгляд на cURL

cURL — это независимый проект с открытым исходным кодом. Он предустановлен в Manjaro 21 и Fedora 36, но его нужно было установить в Ubuntu 21.04.

Это команда для установки cURL в Ubuntu.

sudo apt install curl

Чтобы загрузить тот же файл, что и с помощью wget, и сохранить его с тем же именем, нам нужно использовать эту команду. Обратите внимание, что параметр -o (вывод) пишется строчными буквами с cURL.

curl -o word-file-test.doc https://file-examples.com/wp-content/uploads/2017/02/file-sample_100kB.doc

Файл скачан для нас. Во время загрузки отображается индикатор выполнения ASCII.

Чтобы подключиться к FTP-серверу и загрузить файл, используйте параметр -u (пользователь) и укажите пару имени пользователя и пароля, например:

curl -o test.png -u demo:password ftp://test.rebex.net/pub/example/KeyGenerator.png

Это загружает и переименовывает файл с тестового FTP-сервера.

Нет лучшего

Невозможно ответить «Какой из них я должен использовать», не спросив «Что вы пытаетесь сделать?»

Как только вы поймете, что делают wget и cURL, вы поймете, что они вне конкуренции. Они не удовлетворяют одному и тому же требованию и не пытаются обеспечить одинаковую функциональность.

Загрузка веб-страниц и веб-сайтов — вот в чем заключается превосходство wget. Если это то, что вы делаете, используйте wget. Для всего остального — например, для загрузки или использования любого из множества других протоколов — используйте cURL.