cURL в Linux: что нужно знать для начала работы

Свободная программа cURL — один из старейших и наиболее популярных проектов с открытым исходным кодом. Программа написана на языке C и используется для передачи данных в компьютерных сетях. Название cURL расшифровывается как «клиентский URL». Поскольку программа имеет открытую лицензию, программисты могут использовать ее для самых разных целей. В настоящее время cURL используется в бесчисленных устройствах.

Что такое cURL?

Программное обеспечение cURL состоит из двух компонентов. Программная библиотека libcurl служит основой для передачи данных и поддерживает следующие протоколы:

  • DICT
  • ФАЙЛ
  • FTP
  • FTPS
  • GOPHER
  • HTTP
  • HTTPS
  • IMAP
  • IMAPS
  • LDAP
  • LDAPS
  • POP3
  • POP3S
  • RTMP
  • RTSP
  • SCP
  • SFTP
  • SMB
  • SMBS
  • SMTP
  • SMTPS
  • TELNET
  • TFTP

Программа командной строки cURL, с другой стороны, действует как текстовый интерфейс и взаимодействует с libcurl через командную строку.

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

Как работает cURL?

Два компонента cURL работают по-разному.

Для чего используется libcurl?

Программная библиотека libcurl предоставляет функции для передачи данных в компьютерных сетях. Существуют языковые привязки для десятков популярных языков программирования. Это позволяет легко использовать функции libcurl в самых разных программах, которые взаимодействуют с серверами.

Для чего используется cURL?

Программа командной строки cURL используется для веб-разработки. Самый простой метод — это ввод команд cURL в командную строку. При наличии соответствующих ноу-хау ее можно использовать для тестирования и отладки серверов и API.

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

Ниже приведен общий синтаксис команды cURL:

# General syntax of a cURL command
curl [options] <url>

В приведенных ниже примерах мы будем использовать следующую форму:

# Curling the following URL
url="www.example.com"
curl [options] "$url"

Мы превратили фактический URL в переменную. Это позволяет сосредоточиться на опциях. Опции определяют, как работает запрос cURL.

Практические примеры использования команды cURL в Linux

Чтобы использовать приведенные ниже примеры cURL, вам понадобится следующее:

  1. Компьютер с операционной системой Linux или Unix-подобной операционной системой — включая macOS.
  2. Доступ к окну командной строки или терминалу
  3. Редактор кода/простой текстовый редактор для написания команд
Примечание

Для написания команд следует использовать только редактор кода/простой текстовый редактор. Ни в коем случае не используйте программу обработки текстов (например, Word, OpenOffice или LibreOffice) для подготовки текста для командной строки.

Первоначальный тест с cURL

Сначала проверьте, установлен ли cURL в вашей системе. Для этого откройте окно командной строки и введите в него следующую команду. Возможно, вам придется нажать Enter для выполнения кода.

# Check whether cURL is installed
curl --version

Если вы видите текст, начинающийся с «curl», и номер версии, это означает, что cURL установлен. Если cURL не установлен, следуйте инструкциям в разделе «Все curl», чтобы установить программу.

Совет

Используйте команды «curl —help» и «curl —manual», чтобы узнать больше о команде cURL.

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

Примечание

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

Загрузка файлов с помощью cURL

Получение данных с сервера с помощью cURL

В принципе, вы можете использовать cURL для получения любого URL-адреса. В данном контексте термин «curl» используется как глагол для описания запроса URL с помощью cURL. Проверьте следующий пример:

# Curling the following website
site="www.google.com"
curl "$site"

Если вы выполните код, как написано, он выдаст «data salad». Это потому, что возвращенный ответ на доступ cURL будет домашней страницей Google в HTML. Исходный код HTML будет отображаться непосредственно в окне командной строки без какого-либо форматирования. Для его корректного отображения потребуется браузер. Обычно полезнее сохранить файл локально.

Совет

Используйте команду «clear» в окне командной строки, чтобы очистить экран. Это позволит избавиться от нежелательных данных в окне командной строки.

Получение данных с помощью cURL и сохранение их локально

Давайте загрузим логотип из английской версии Википедии. Опция «-O» (o в верхнем регистре, не ноль) указывает cURL использовать имя файла в конце URL. Когда вы используете эту опцию, cURL сохранит загруженный файл локально под тем же именем.

# An image from the English version of Wikipedia
file="https://en.wikipedia.org/static/images/project-logos/enwiki-2x.png"
# Retrieving the image and saving it locally under the same name
curl “$file" -O

Но что если URL не содержит имени файла? Проверьте следующий код:

# Google homepage
homepage="www.google.com"
# Retrieving the homepage with the -O option
curl "$homepage" -O

Как видите, отображается ошибка, поскольку URL домашней страницы Google не содержит имени файла. В этом случае необходимо использовать опцию «-o» (строчная буква o), чтобы самостоятельно присвоить файлу имя:

# Google homepage
homepage="www.google.com"
# Name for the file to be created
name="homepage-google.html"
# Retrieving the homepage and saving it locally under the chosen name
curl "$homepage" -o "$name"

Возобновление загрузки с помощью cURL, если она была прервана

Возможно, вы уже сталкивались с такой неприятной ситуацией: вы выполняете большую загрузку, которая уже заняла несколько часов, как вдруг она прерывается, заставляя вас начинать все сначала. В этом случае cURL может помочь опция «-C-«:

# A large file (human genome) to be downloaded
file="https://ftp.ncbi.nih.gov/genomes/refseq/vertebrate_mammalian/Homo_sapiens/reference/GCF_000001405.39_GRCh38.p13/GCF_000001405.39_GRCh38.p13_genomic.gbff.gz"
# Resuming the download if it is interrupted
curl -C- -O “$file"
Примечание

Технически эта опция имеет вид «-C -» с пробелом после буквы C, но похожий вариант «-C-» легче читается и запоминается, поэтому здесь мы используем именно его.

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

Совет

Вы можете отменить текущий запрос cURL. Для этого нажмите Ctrl+C. Возможно, вам придется сделать это несколько раз.

Общение с сервером с помощью cURL

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

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

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

# Testing whether a web server is available
server="google.com"
curl -I "$server"

Если после выполнения кода отображается информация о состоянии, это означает, что сервер доступен.

Вывод заголовка с помощью cURL

В каждом HTTP-запросе, помимо собственно документа, происходит обмен метаданными. Эти данные называются HTTP-заголовком и описывают как документ, так и статус HTTP-запроса. Вероятно, вы уже сталкивались с сообщением об ошибке 404 Not Found в то или иное время. Эта ошибка представляет собой тип метаданных — запрошенный документ не найден.

Посмотрите на вывод заголовка для URL «google.com». Для этого используйте cURL с опцией «—head»:

# Outputting the header
url="google.com"
curl --head "$url"

Среди прочей информации вы должны увидеть «301 Moved Permanently». Это код статуса HTTP для постоянного перенаправления. Вы видите перенаправление с [google.com] (без «www») на [www.google.com].

Совет

Вместо опции «—head» вы можете использовать эквивалентную версию «-I» (в верхнем регистре i). Его легко запомнить с помощью мнемоники: вы используете его для получения информации об URL, а не о его фактическом содержимом.

Анализ цепочек редиректов с помощью cURL

HTTP-перенаправления могут быть соединены в последовательность. Мы называем это «цепочкой перенаправлений». Например, возьмем сайт с домашней страницей, на которой отображается адрес [https://www.example.com/]. Если вы попытаетесь зайти на сайт, используя адрес [http://example.com], это может привести к следующим перенаправлениям:

  • [http://example.com] → [https://example.com]
  • [https://example.com] → [https://www.example.com]
  • [https://www.example.com] → [https://www.example.com/].

Цепочка перенаправлений приводит к неоправданно долгому времени загрузки, и ее следует избегать. К сожалению, с этой проблемой не так просто справиться. Когда сайт загружается в браузер, перенаправления происходят незаметно для пользователя. В этом случае cURL может помочь опция «—location»: она указывает cURL следовать за перенаправлениями до последнего. Здесь мы используем опцию «—head», поскольку нас не интересует содержание сайтов.

# Checking redirects
url="google.com"
curl --location --head  "$url"
Совет

Вместо опции «—location» вы можете использовать эквивалентную версию «-L» (в верхнем регистре l).

Передача данных на сервер с помощью cURL

Помимо получения данных, вы также можете использовать cURL для передачи данных на сервер. Это может быть полезно, например, если вы хотите автоматизировать процесс заполнения онлайн-формы. cURL поддерживает метод запроса POST, а также GET.

Поскольку передача данных сложнее, чем их получение, мы можем привести здесь лишь приблизительный пример. Для получения более подробной информации читайте о методе HTTP POST в статье Everything curl.

# Transferring data to a server
url="example.com"
# Providing the data as key value pairs separated by the “&” symbol
data="firstname=Peter&lastname=Mustermann&age=42"
# This cURL request transfers the data via POST
curl --data "$data" "$url"
# Alternatively, tell cURL to transfer the data via GET
curl --data "$data" "$url" --get

HTTP-куки — это небольшие фрагменты данных, которые сохраняются локально на вашем устройстве при посещении большинства веб-сайтов. Вы можете просмотреть файлы cookie с посещенных вами сайтов в своем браузере и удалить их оттуда. Однако этот способ обычно слишком утомителен для целей тестирования. Вы также можете использовать опцию cURL «—cookie-jar» для более прямого доступа к файлам cookie.

# Accessing cookies
url="www.google.com"
cookies="cookies.txt"
curl --head --cookie-jar "$cookies" "$url"
# Displaying cookies with the cat command
cat "$cookies"
Совет

Вы также можете указать cURL передавать файлы cookie с помощью опции «—cookie».

Общие опции

Некоторые из доступных опций cURL можно комбинировать с теми, которые мы уже рассмотрели.

Отображение дополнительной информации

Иногда информации, отображаемой при выполнении команды cURL, недостаточно. В этом случае вы можете использовать опцию «—verbose». Когда вы выполните команду cURL с этой опцией, она предоставит больше информации.

# Displaying additional information
url="www.google.com"
curl --verbose -I "$url"

Ввод имени пользователя и пароля с помощью cURL

Некоторые URL-адреса защищены от несанкционированного доступа с помощью HTTP-аутентификации. Но что делать, если вы хотите получить доступ к такому URL с помощью cURL? Если вы не укажете имя пользователя и пароль, вы получите сообщение об ошибке HTTP 401. В этой ситуации используйте следующий синтаксис:

# Entering a username and password with cURL
# Password-protected URL 
url="www.example.com/secure/"
# User
user=""
# Password
password=""
curl --user "${user}:${password}" "$url"
Совет

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

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

Прокси-сервер — это сервер-посредник. Прокси-серверы могут быть полезны по ряду причин. Например, некоторые требования безопасности и производительности могут быть легче удовлетворены с помощью прокси.

Вам нужно указать cURL, что вы подключаетесь к интернету с помощью прокси. Для этого используйте опцию «—proxy»:

# Using a proxy with cURL
url="www.google.com"
proxy="proxy.example.com"
port="8080"
curl --proxy "${proxy}:${port}" "$url"
Примечание

Если вам нужно ввести имя пользователя и пароль для прокси-сервера, вы можете сделать это с помощью опции «—proxy-user». В этом случае введите имя пользователя и пароль в следующем формате: «user:password».

Оцените статью
cdelat.ru
Добавить комментарий