ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
контакт-центра
 онтакт - центр как канал продаж и маркетинговой коммуникации ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопастность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

9 минут чтени€

≈сли вы когда-то пользовались какой-нибудь серверной версией Linux, то скорее всего сталкивались с командой curl. Ёта мощна€ утилита системы Linux позвол€ет скачивать и загружать файлы на сервер и поддерживает более 20 протоколов.

–аньше мы писали про первые 15 примеров cURL в Linux. —тать€ зашла - это продолжение :)

cURL идеальна€ команда дл€ взаимодействи€ с веб-сайтом или API, отправлени€ запросов и получени€ ответов на терминал или с выводом в файл. »ногда она используетс€ как часть сложного скрипта дл€ передачи полученных данных другим функци€м на дальнейшую обработку.

Ќар€ду с получением файлов из сервера, cURL так же используетс€ дл€ закачки части вебсайта. Ќесмотр€ на то, что она довольно хорошо справл€етс€ с работой, но всЄ же wget лучше наточен под такую работу.

¬ конце материала мы рассмотрим несколько отличий и сходств этих двух утилит, но а пока расскажем как пользоватьс€ утилитой curl.

—качивание файла

—ама€ базова€ команда, которую можно дать утилите cURL это скачать сайт или файл. ѕо умолчанию, cURL использует протокол HTTP, но мы можем задать любой другой. „тобы открыть исходный код сайта просто нужно ввести команду:

$ curl http://www.google.com
вывод curl

 огда мы вводим указанную команду, окно терминала заполн€етс€ HTML и другим кодом, используемым дл€ создани€ веб страницы, но от такого вывода мало пользы. »зменим команду так, чтобы вывод перенаправл€лс€ в HTML файл, чтобы затем можно было просмотреть содержимое.

$ curl www.likegeeks.com --output likegeeks.html

“еперь файл можно открыть любым браузером.

открыть файл в браузере

≈сли нужно скачать какой-то файл, то команда остаетс€ та же. “олько нужно добавить опцию output, как мы и сделали ранее. ≈сли не сделать команда вернЄт бинарный код файла, что может привести к сбою.

Ќиже показано что мы видим при попытке загрузить Word документ размером 500 б.

скачать файл через cURL

‘айл начинает закачиватьс€, и мы видим текущий статус закачки.  огда загрузка завершитс€ файл будет расположен по пути, указанной во врем€ запуска команды. ≈сли такового не было указано, то файл будет расположен в текущей директории.

“акже, вы, наверное, заметили ключ L в команде. ѕри загрузке файла этот ключ необходим, но о его назначении поговорим чуть позже.


ќтслеживание редиректа

≈сли после выполнени€ команды ничего не вернулось это значит, что на сайте есть редирект (переадресаци€) на другую ссылку, но cURL не понимает этого. Ёто можно исправить, указав ключ L при вводе команды.

¬о врем€ подготовки материала мы заметили, что данный ключ нужен в подавл€ющем большинстве случаев. “ак что возьмите себе эту фишку на вооружение.


ќстановка и продолжение скачивани€

≈сли во врем€ закачки файла что-то пошло не так или же качаете большой файл, но ввиду каких-то причин не хотите делать это за одну сессию, cURL предоставл€ет возможность остановки и продолжени€ закачки.

„тобы остановить процесс вручную, нужно нажать комбинацию CTRL+C, котора€ используетс€ дл€ остановки почти всех процессов, запущенных в терминале.

остановить загрузку через cURL

»так, загрузка была начата, но мы прервали еЄ комбинацией клавиш, а теперь нам нужно продолжить закачку. ƒл€ этого вводим следующую команду.

$ curl -C - example.com/some-file.zip --output MyFile.zip

 люч C говорит утилите cURL продолжить закачку, но обратите внимание, что сразу после ключа указан дефис. Ётот дефис указывает команде перед продолжением просмотреть уже закачанную часть, чтобы пон€ть с какого места нужно продолжать загрузку.

вернуть загрузку через cURL

«акачка продолжилась и успешно завершилась.


”казание времени выполнени€ команды

≈сли нужно чтобы прервать выполнение команды cURL по истечении указанного времени, мы можем указать таймер выполнени€ команды. Ёто особо полезно так как некоторые операции выполн€ютс€ бесконечно, что может привести к зависанию системы. „тобы избежать этого можно указать максимальный период в секундах, по истечении которого cURL прервЄт выполнение команды. ¬ышесказанное реализуетс€ следующим образом:

$ curl -m 60 example.com

“акже есть возможность указать в течении какого времени держать соединение активным. Ёто позволит избежать бесконечных попыток соединени€ с узлом, который не доступен. Ёта опци€ тоже в качестве аргумента принимает значение в секундах. ј команда выгл€дит так:

$ curl --connect-timeout 60 example.com

”казание логина и парол€

”тилита cURL позвол€ет указывать им€ пользовател€ и пароль при подключении. „аще всего это нужно при аутентификации на FTP сервере. ƒл€ этого используетс€ ключ u. —интаксис команды указан ниже:

$ curl -u username:password ftp://example.com
”казание логина и парол€ cURL

ƒанную опцию можно использовать с любым протоколом, но FTP €вл€етс€ самым распространЄнным дл€ простой передачи файлов.

≈сли нужно скачать файл указанный на скриншоте ниже запускаем ту же команду, только указываем полный путь к нужному документу.

$ curl -u username:password ftp://example.com/readme.txt
пример скачивани€ с логином и паролем cURL

»спользование прокси

cURL можно указать, чтобы подключение выполн€лось через прокси сервер. ѕо умолчанию, она использует HTTP прокси, но можно указать и другие. „тобы направить трафик через прокси используетс€ ключ x.

$ curl -x 192.168.1.1:8080 http://example.com

ƒанна€ команда об€зует cURL подключитьс€ к прокси по адресу 192.168.1.1 на порту 8080 перед обращением на example.com

ѕрокси можно использовать и с другими протоколами. Ќиже показан пример использовани€ прокси сервера дл€ получени€ файла с фтп сервера.

$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txt

cURL поддерживает много типов прокси и соответствующих ключей, но охватить их всех в одном руководстве сложно. ƒл€ более подробной информации о туннелировании, SOCKS прокси, аутентификации и т.п. можете прочитать man по команде cURL.


«агрузка больших файлов по част€м

ћы уже показывали как можно остановить и запустить закачку, но что если мы хотим скачать файл большого размера по част€м? cURL имеет и такую возможность. „тобы реализовать это достаточно указать ключ -range и размер загружаемой части. –азмер должен быть указан в байтах.

„тобы скачать последнюю версию Ubuntu част€ми по 100 ћЅ нужно прописать следующую команду:

$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1

¬о втора€ команде нужно указать с какого байта начинать загрузку. » так пока не скачаетс€ весь файл.

$ curl --range 100000000-199999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part2

«атем просто нужно собрать воедино скачанные части:

$ cat ubuntu-part? > ubuntu-18.04.3-desktop-amd64.iso

јутентификаци€ по сертификату

ƒл€ подключени€ к сайту использованием сертификата вместо обычной аутентификации можно указать опцию cert и путь к сертификату.

$ curl --cert path/to/cert.crt:password ftp://example.com

cURL поддерживает большое количество форматов сертификатов и имеет очень много опций дл€ работы с ними: -cacert, cert-status, -cert-type, и т.д. ƒл€ списка всех ключей посмотрите man.


“ихий режим

≈сли вас раздражают разные сообщени€ об ошибках во врем€ работы с cURL, то можно запустить еЄ в тихом режиме. ƒл€ этого используетс€ ключ s. Ќо, чтобы увидеть результат выполнени€ команды вывод нужно перенаправить в файл. ƒл€ сохранени€ файла в текущей директории просто нужно указать ключ O.

$ curl -s -O http://example.com

 ак альтернатива, команду можно запустить с опцией --output и указать название и путь к месту сохранени€ файла.

$ curl -s http://example.com --output index.html
тихий режим cURL

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

cURL позвол€ет легко получать заголовков какого-либо сайта. ƒл€ этого достаточно запустить команду с ключом I.

$ curl -I example.com
получение заголовков cURL

≈сли запустить команду с ключами I и L совместно, то cURL выведЄт заголовки даже если на сайте стоит переадресаци€.


ћножественные заголовки

 оманде cURL можно передать и заголовки. ƒл€ этого есть ключ H. ƒл€ передачи нескольких заголовков перед каждым из них нужно поставить данный ключ.

$ curl -H 'Connection: keep-alive' -H 'Accept-Charset: utf-8 ' http://example.com

POST «акачка файла на сервер

POST самый распространЄнный метод получени€ данных на веб-сайтах. Ќапример, когда заполн€ете форму на сайте, скорее всего данные из форм передаютс€ серверу методом пост. „тобы отправить сайту данные этим методом нужно использовать ключ d.

$ curl -d 'name=geek&location=usa' http://example.com

„тобы загрузить файл вместо текста нужно ввести следующую команду

$ curl -d @filename http://example.com

»спользуйте ключ d столько раз, сколько данных или файлов нужно отправить на сайт.

„тобы загрузить файл через протокол FTP используйте ключ T

$ curl -T myfile.txt ftp://example.com/some/directory/

ќтправка почты

ќтправка почты это один из видов загрузки данных на почтовый сервер. “ак как cURL может загружать файлы, то мы можем использовать ее и дл€ отправки почты. ≈сть много вариантов сделать это, но здесь мы рассмотрим, как посылать почты через SMTP сервер.

$ curl smtp://mail.example.com --mail-from me@example.com --mail-rcpt john@domain.com --upload-file email.txt

”чтите, что файл e-mail должен быть отформатирован нужным образом. „то-то вроде этого:

$ cat email.txt
From: Web Administrator <me@example.com>
To: John Doe <john@domain.com>
Subject: An example email
Date: Sat, 7 Dec 2019 02:10:15

John,

Hope you have a great weekend.

-Admin

 ак всегда, за подробной информацией можете обратитьс€ к man.


„тение почты

ƒл€ получени€ почты используетс€ IMAP и POP3 и сurl поддерживает оба протокола. «айдем на почту использу€ протокол IMAP:

$ curl -u username:password imap://mail.example.com

ƒанна€ команда выведет список доступных почтовых €щиков, но не покажет их содержание. „тобы прочитать письмо нужно указать UID письма аргументов дл€ опции X.

$ curl -u username:password imap://mail.example.com -X 'UID FETCH 1234'

–азница между cURL и wget

»ногда пользователей путаютс€ между curl и wget, так как обе они могут получать информацию с сервера. Ќо это единственное сходство между ними.

¬ этом материале мы показали возможности curl. wget дает другие возможности. wget лучша€ утилита дл€ скачивани€ файлов, а также у него есть возможность делать это рекурсивно, переход€ по всем ссылкам и директори€ и скачать сайт полностью.

“аким образом, если вам нужно скачать все исходные файлы сайта используйте wget. ≈сли же используетс€ протокол отличный от HTTP или HTTPS, или нужно закачать файл на сервер, выберите curl. cURL удобен дл€ скачивани€ одиночных файлов, хот€ и wget неплохо справл€етс€ с данной задачей.


ѕолезна ли ¬ам эта стать€?


Ёти статьи могут быть вам интересны: