
Свободная программа cURL — один из старейших и наиболее популярных проектов с открытым исходным кодом. Программа написана на языке C и используется для передачи данных в компьютерных сетях. Название cURL расшифровывается как «клиентский URL». Поскольку программа имеет открытую лицензию, программисты могут использовать ее для самых разных целей. В настоящее время cURL используется в бесчисленных устройствах.
- Что такое cURL?
- Как работает cURL?
- Для чего используется libcurl?
- Для чего используется cURL?
- Практические примеры использования команды cURL в Linux
- Первоначальный тест с cURL
- Загрузка файлов с помощью cURL
- Получение данных с сервера с помощью cURL
- Получение данных с помощью cURL и сохранение их локально
- Возобновление загрузки с помощью cURL, если она была прервана
- Общение с сервером с помощью cURL
- Использование cURL для проверки доступности сервера
- Вывод заголовка с помощью cURL
- Анализ цепочек редиректов с помощью cURL
- Передача данных на сервер с помощью cURL
- Доступ к файлам cookie с помощью cURL
- Общие опции
- Отображение дополнительной информации
- Ввод имени пользователя и пароля с помощью cURL
- Использование прокси с 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, вам понадобится следующее:
- Компьютер с операционной системой Linux или Unix-подобной операционной системой — включая macOS.
- Доступ к окну командной строки или терминалу
- Редактор кода/простой текстовый редактор для написания команд
Для написания команд следует использовать только редактор кода/простой текстовый редактор. Ни в коем случае не используйте программу обработки текстов (например, 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
Доступ к файлам cookie с помощью cURL
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».