LinuxКак сделать

Как использовать curl для загрузки файлов из командной строки Linux

Окно терминала на рабочем столе Linux в стиле Ubuntu.
Фатмавати Ахмад Заенури / Shutterstock

Команда Linux curl может сделать гораздо больше, чем просто скачивать файлы. Узнайте, на что способен curl , и когда вы должны использовать его вместо wget .

curl vs. wget: в чем разница?

Люди часто пытаются определить относительные преимущества команд wget и curl . Команды имеют некоторое функциональное перекрытие. Каждый из них может извлекать файлы из удаленных мест, но на этом сходство заканчивается.

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

curl удовлетворяет совершенно другую потребность . Да, он может извлекать файлы, но не может рекурсивно перемещаться по веб-сайту в поисках контента для извлечения. На самом деле curl позволяет вам взаимодействовать с удаленными системами, отправляя запросы к этим системам, а также получая и отображая их ответы. Эти ответы вполне могут быть содержимым веб-страницы и файлами, но они также могут содержать данные, предоставляемые через веб-службу или API в результате «вопроса», задаваемого запросом скручивания.

И curl не ограничивается веб-сайтами. curl поддерживает более 20 протоколов, включая HTTP, HTTPS, SCP, SFTP и FTP. И, возможно, благодаря превосходной обработке каналов Linux, curl легче интегрировать с другими командами и сценариями.

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

Установка скручивания

На компьютерах, использовавшихся для исследования этой статьи, Fedora 31 и Manjaro 18.1.0 уже установили curl . curl должен был быть установлен на Ubuntu 18.04 LTS. В Ubuntu запустите эту команду, чтобы установить ее:

  sudo apt-get установить curl 

sudo apt-get установить curl в окне терминала

Скручиваемая версия

Опция --version заставляет curl сообщать свою версию. В нем также перечислены все протоколы, которые он поддерживает.

  завиток - версия 

curl - версия в окне терминала

Получение веб-страницы

Если мы укажем curl на веб-страницу, она найдет его для нас.

  curl https://www.bbc.com 

curl https://www.bbc.com в окне терминала

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

Вывод из curl с отображением исходного кода веб-страницы в окне терминала

Осторожно : если вы не скажете curl что хотите что-то сохранить в виде файла, он всегда будет выгружать его в окно терминала. Если файл, который он получает, является двоичным файлом, результат может быть непредсказуемым. Оболочка может попытаться интерпретировать некоторые байтовые значения в двоичном файле как управляющие символы или escape-последовательности.

Сохранение данных в файл

Давайте скажем curl, чтобы перенаправить вывод в файл:

  curl https://www.bbc.com> bbc.html 

curl https://www.bbc.com> bbc.html в окне терминала

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

Это не было сделано в предыдущем примере, потому что информация о прогрессе была бы разбросана по всему исходному коду веб-страницы, поэтому curl автоматически подавлял ее.

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

curl индикатор загрузки в окне терминала

Предоставленная информация:

  • % Total : общая сумма, которую нужно получить.
  • % Полученных : процент и фактические значения данных, полученных на данный момент.
  • % Xferd : процент и фактическое отправленное, если данные загружаются.
  • Средняя скорость загрузки : средняя скорость загрузки.
  • Средняя скорость загрузки : средняя скорость загрузки.
  • Общее время : предполагаемая общая продолжительность передачи.
  • Затраченное время : истекшее время для этой передачи.
  • Оставшееся время : Расчетное время, оставшееся до завершения передачи.
  • Текущая скорость : текущая скорость передачи для этой передачи.

Поскольку мы перенаправили вывод из curl в файл, теперь у нас есть файл с именем «bbc.html».

Файл bbc.html, созданный curl.

Двойной щелчок по этому файлу откроет браузер по умолчанию, чтобы отобразить найденную веб-страницу.

Полученная веб-страница отключена в окне браузера.

Обратите внимание, что адрес в адресной строке браузера является локальным файлом на этом компьютере, а не удаленным веб-сайтом.

Нам не нужно перенаправлять вывод, чтобы создать файл. Мы можем создать файл, используя опцию -o (output) и указав curl чтобы создать файл. Здесь мы используем опцию -o и предоставляем имя файла, который хотим создать «bbc.html».

  curl -o bbc.html https://www.bbc.com 

curl -o bbc.html https://www.bbc.com в окне терминала

Использование индикатора выполнения для мониторинга загрузок

Чтобы заменить текстовую информацию о загрузке на простой индикатор выполнения, используйте параметр -# (индикатор выполнения).

  curl -x -o bbc.html https://www.bbc.com 

curl -x -o bbc.html https://www.bbc.com в окне терминала

Возобновление прерванной загрузки

Легко перезапустить загрузку, которая была прервана или прервана. Давайте начнем загрузку большого файла. Мы будем использовать последнюю версию долгосрочной поддержки Ubuntu 18.04. Мы используем параметр --output чтобы указать имя файла, в который мы хотим сохранить его: «ubuntu180403.iso».

  curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso 

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso в окне терминала

Загрузка начинается и работает на пути к завершению.

Прогрессы большой загрузки в терминале Widnow

Если мы принудительно прервем загрузку с помощью Ctrl+C , мы вернемся в командную строку, и загрузка будет прекращена.

Чтобы возобновить загрузку, используйте параметр -C (продолжить в). Это заставляет curl перезапустить загрузку с указанной точки или смещения в целевом файле. Если вы используете дефис - в качестве смещения, curl будет смотреть на уже загруженную часть файла и определит правильное смещение для использования.

  curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso 

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso в окне терминала

Загрузка возобновляется. curl сообщает о смещении, с которого он перезапускается.

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso в окне терминала

Получение заголовков HTTP

С опцией -I (head) вы можете получить только заголовки HTTP. Это то же самое, что отправка команды HTTP HEAD на веб-сервер.

  curl -I www.twitter.com 

curl-я www.twitter.com в окне терминала

Эта команда извлекает только информацию; он не загружает никаких веб-страниц или файлов.

Вывод из curl -I www.twitter.com в окне терминала

Загрузка нескольких URL

Используя xargs мы можем загрузить несколько URL-адресов одновременно. Возможно, мы хотим скачать серию веб-страниц, которые составляют одну статью или учебник.

Скопируйте эти URL-адреса в редактор и сохраните их в файл с именем «urls-to-download.txt». Мы можем использовать xargs для обработки содержимого каждой строки текстового файла как параметра, который он будет curl в свою очередь, в свою очередь. ,

  https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0
 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1
 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2
 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3
 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4
 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5 

Это команда, которую мы должны использовать, чтобы xargs передавал эти URL-адреса для curl одному:

  xargs -n 1 curl -O <urls-to-download.txt 

Обратите внимание, что в этой команде используется команда вывода -O (удаленный файл), в которой используется заглавная буква «O». Эта опция заставляет curl сохранять полученный файл с тем же именем, что и файл на удаленном сервере.

Опция -n 1 указывает xargs обрабатывать каждую строку текстового файла как один параметр.

Когда вы запустите команду, вы увидите, как несколько загрузок начинаются и заканчиваются одна за другой.

Вывод из xargs и curl загрузки нескольких файлов

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

загруженный файл в браузере файлов nautilus

СВЯЗАННЫЕ: Как использовать команду xargs в Linux

Загрузка файлов с FTP-сервера

Использовать curl на сервере FTP ( File Transfer Protocol ) легко, даже если вам необходимо пройти аутентификацию с использованием имени пользователя и пароля. Чтобы передать имя пользователя и пароль с помощью curl используйте параметр -u (user) и введите имя пользователя, двоеточие «:» и пароль. Не ставьте пробел до или после двоеточия.

Это бесплатный для тестирования FTP-сервер, размещенный на Rebex . На тестовом FTP-сайте заранее задано имя пользователя «demo», а пароль — «пароль». Не используйте этот тип слабого имени пользователя и пароля на производственном или «реальном» FTP-сервере.

  curl -u demo: пароль ftp://test.rebex.net 

curl -u demo: пароль ftp://test.rebex.net в окне терминала

curl выясняет, что мы указываем его на FTP-сервер, и возвращает список файлов, которые присутствуют на сервере.

Список файлов на удаленном FTP-сервере в окне терминала

Единственный файл на этом сервере — это файл «readme.txt» длиной 403 байта. Давайте восстановим это. Используйте ту же команду, что и минуту назад, с добавленным к ней именем файла:

  curl -u demo: пароль ftp://test.rebex.net/readme.txt 

curl -u demo: пароль ftp://test.rebex.net/readme.txt в окне терминала

Файл извлекается, и curl отображает его содержимое в окне терминала.

Содержимое файла, полученного с FTP-сервера, отображается в окне терминала

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

  curl -O -u демо: пароль ftp://test.rebex.net/readme.txt 

curl -O -u demo: пароль ftp://test.rebex.net/readme.txt в окне терминала

Файл извлекается и сохраняется на диск. Мы можем использовать ls чтобы проверить детали файла. Он имеет то же имя, что и файл на сервере FTP, и имеет ту же длину, 403 байта.

  ls -hl readme.txt 

ls -hl readme.txt в окне терминала

СВЯЗАННЫЕ: Как использовать команду FTP в Linux

Отправка параметров на удаленные серверы

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

В качестве простого примера, веб-сайт ipify имеет API, который может быть запрошен для определения вашего внешнего IP-адреса.

  curl https://api.ipify.org 

Добавив параметр format в команду со значением «json», мы снова можем запросить наш внешний IP-адрес, но на этот раз возвращенные данные будут закодированы в формате JSON .

  curl https://api.ipify.org?format=json 

curl https://api.ipify.org в окне терминала

Вот еще один пример, который использует API Google. Возвращает объект JSON, описывающий книгу. Параметр, который вы должны указать, — это номер международного стандартного номера книги (ISBN). Вы можете найти их на задней обложке большинства книг, обычно под штрих-кодом. Здесь мы будем использовать параметр «0131103628».

  curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628 

curl https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628 в окне терминала

Возвращенные данные являются исчерпывающими:

Данные API Google Book отображаются в окне терминала

Иногда скручиваемость, иногда

Если бы я хотел загрузить контент с веб-сайта и чтобы рекурсивный поиск этого контента проводился в древовидной структуре сайта, я бы использовал wget .

Если бы я хотел взаимодействовать с удаленным сервером или API и, возможно, загрузить некоторые файлы или веб-страницы, я бы использовал curl . Особенно, если протокол был одним из многих, не поддерживаемых wget .

Похожие посты
Как сделать

Как получить возмещение за покупки в iTunes или App Store

Как сделать

Поверхностное перо не работает? Вот как это исправить

Как сделать

Как настроить и использовать Fire TV Recast

Как сделать

Как изменить рингтон по умолчанию на вашем iPhone