Введение
Добро пожаловать в лабораторную работу по передаче данных по URL в Linux. В этой лабораторной работе вы научитесь передавать данные с использованием URL в системах Linux. Это фундаментальный навык для системных администраторов, разработчиков и специалистов по безопасности.
Основной инструмент, который мы изучим, - это curl, мощная командная утилита для передачи данных с использованием синтаксиса URL. Вы научитесь получать данные с веб-сайтов, сохранять контент в файлы, использовать различные HTTP-методы и настраивать свои запросы с помощью различных параметров.
К концу этой лабораторной работы у вас будет практический опыт в использовании основных методов передачи данных, которые обычно применяются в реальных сценариях.
Основы работы с curl
curl - это командная утилита для передачи данных с использованием синтаксиса URL. Она поддерживает множество протоколов, включая HTTP, HTTPS, FTP и многие другие. На этом этапе вы научитесь базовому использованию curl для получения веб-контента.
Начнем с открытия терминала. Терминал должен уже находиться в директории /home/labex/project. Если это не так, вы можете перейти в эту директорию, используя следующую команду:
cd ~/project
Ваш первый запрос с использованием curl
Начнем с использования curl для получения контента с веб-сайта. Введите следующую команду:
curl http://example.com
После выполнения этой команды вы должны увидеть HTML-контент сайта example.com, отображаемый в терминале. Этот вывод включает в себя HTML-теги и весь контент веб-страницы. Вывод должен выглядеть примерно так:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents...</p>
...
</div>
</body>
</html>
Это демонстрирует самый базовый способ использования curl - получение контента по URL и его вывод непосредственно в терминал.
Понимание вывода
Вывод, который вы видите, представляет собой необработанный HTML-ответ от сервера. Когда вы посещаете веб-сайт с помощью браузера, браузер интерпретирует этот HTML и отображает его в виде отформатированной веб-страницы. Однако curl просто показывает вам необработанный контент.
Попробуем другой пример, чтобы увидеть другой тип контента. Выполните следующую команду:
curl https://httpbin.org/json
На этот раз вы должны увидеть JSON-ответ. Вывод должен выглядеть так:
{
"slideshow": {
"author": "Yours Truly",
"date": "date of publication",
"slides": [
{
"title": "Wake up to WonderWidgets!",
"type": "all"
},
{
"items": [
"Why <em>WonderWidgets</em> are great",
"Who <em>buys</em> WonderWidgets"
],
"title": "Overview",
"type": "all"
}
],
"title": "Sample Slide Show"
}
}
Как вы можете видеть, curl может получать различные типы контента в зависимости от того, что предоставляет сервер.
Сохранение вывода в файлы
В многих случаях вы, возможно, захотите сохранить полученный контент, а не просто просмотреть его в терминале. На этом этапе вы научитесь сохранять вывод команды curl в файлы.
Сохранение с использованием перенаправления вывода
Самый простой способ сохранить вывод команды curl - использовать перенаправление с помощью оператора >. Выполните следующую команду:
curl http://example.com > example.html
Эта команда получает контент с сайта example.com и сохраняет его в файл с именем example.html в текущей директории. Чтобы убедиться, что файл был создан, выполните следующую команду:
ls -l example.html
Вы должны увидеть файл в списке с указанием его размера и других деталей.
Чтобы проверить содержимое файла, вы можете использовать команду cat:
cat example.html
Вы должны увидеть тот же HTML-контент, который был ранее отображен в терминале.
Использование опции -o в curl
curl предоставляет специальную опцию -o (или --output), чтобы сохранить полученный контент в файл. Это особенно полезно, когда перенаправление вывода может вызвать проблемы. Давайте попробуем:
curl -o httpbin_data.json https://httpbin.org/json
Эта команда сохраняет JSON-данные с сайта httpbin.org в файл с именем httpbin_data.json. Проверьте создание файла с помощью следующей команды:
ls -l httpbin_data.json
И проверьте его содержимое с помощью команды:
cat httpbin_data.json
Создание директории для данных
Хорошей практикой является организация своих файлов. Давайте создадим специальную директорию для данных (если она еще не существует) и сохраним в ней некоторый контент:
mkdir -p data
curl -o data/google_data.txt http://www.google.com
Команда mkdir -p создает директорию data, если она еще не существует. Флаг -p гарантирует, что ошибка не будет сообщена, если директория уже существует.
Теперь убедитесь, что файл был создан в директории data:
ls -l data/google_data.txt
Вы должны увидеть файл в списке с указанием его деталей.
Расширенные параметры curl
curl предлагает множество опций, которые позволяют настраивать запросы. На этом этапе вы узнаете о некоторых из наиболее полезных опций.
Режим подробного вывода
Опция -v (или --verbose) сообщает curl отображать подробную информацию о запросе и ответе. Это особенно полезно для отладки. Выполните следующую команду:
curl -v http://example.com
Вы должны увидеть много информации, включая:
- Заголовки запроса, отправленные
curl - Детали соединения
- Заголовки ответа от сервера
- Фактический контент ответа
Вывод будет похож на следующий (хотя некоторые детали могут отличаться):
* Trying 93.184.216.34:80...
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 578793
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 26 Dec 2023 13:45:32 GMT
< Etag: "3147526947+ident"
< Expires: Tue, 02 Jan 2024 13:45:32 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (dcb/7F83)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
<
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
Строки, начинающиеся с *, являются информационными сообщениями от curl itself.
Строки, начинающиеся с >, являются заголовками запроса.
Строки, начинающиеся с <, являются заголовками ответа.
Фактический контент следует после заголовков ответа.
Пользовательские заголовки
Иногда вам нужно отправить определенные заголовки с запросом. Для этого можно использовать опцию -H (или --header). Попробуем установить пользовательский User-Agent:
curl -H "User-Agent: MyCustomClient/1.0" https://httpbin.org/user-agent
Эта команда отправляет запрос на httpbin.org с пользовательским заголовком User-Agent. В ответе должно быть подтверждение, что ваш пользовательский User-Agent был получен:
{
"user-agent": "MyCustomClient/1.0"
}
Следуя перенаправлениям
По умолчанию curl не следит за HTTP-перенаправлениями. Вы можете использовать опцию -L (или --location), чтобы заставить его следовать за перенаправлениями. Попробуем:
curl -L http://github.com
Без опции -L вы бы получили только ответ с перенаправлением. С опцией -L curl следует за перенаправлением и показывает вам контент конечного назначения.
Давайте создадим файл в директории data, чтобы потренироваться с этими опциями:
curl -v -L -o data/redirect_example.txt http://github.com
Эта команда:
- Использует режим подробного вывода (
-v) - Следует за перенаправлениями (
-L) - Сохраняет вывод в файл
data/redirect_example.txt - Запрашивает контент с github.com
Убедитесь, что файл был создан:
ls -l data/redirect_example.txt
Вы должны увидеть файл в списке с указанием его деталей.
HTTP-методы и отправка данных
curl поддерживает различные HTTP-методы помимо стандартного метода GET. На этом этапе вы узнаете, как использовать разные HTTP-методы и отправлять данные с запросами.
Использование метода POST
Метод POST обычно используется для отправки данных на сервер. Вы можете использовать опцию -X для указания HTTP-метода и опцию -d для предоставления данных. Попробуем:
curl -X POST -d "name=John&age=25" https://httpbin.org/post
Эта команда отправляет POST-запрос с данными формы на httpbin.org. В ответе должны быть отражены данные, которые вы отправили:
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "25",
"name": "John"
},
"headers": {
"Accept": "*/*",
"Content-Length": "16",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": null,
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
Отправка JSON-данных
Для отправки JSON-данных необходимо указать заголовок Content-Type. Выполните следующую команду:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":25}' https://httpbin.org/post
В ответе должны быть включены ваши JSON-данные:
{
"args": {},
"data": "{\"name\":\"John\",\"age\":25}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "24",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": {
"age": 25,
"name": "John"
},
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
Использование других HTTP-методов
curl поддерживает все стандартные HTTP-методы. Попробуем отправить PUT-запрос:
curl -X PUT -d "data=example" https://httpbin.org/put
Вы также можете попробовать отправить DELETE-запрос:
curl -X DELETE https://httpbin.org/delete
Каждая из этих команд вернет ответ, показывающий детали вашего запроса.
Давайте сохраним вывод POST-запроса в файл:
curl -X POST -d "name=John&age=25" -o data/post_response.json https://httpbin.org/post
Убедитесь, что файл был создан:
ls -l data/post_response.json
И проверьте его содержимое:
cat data/post_response.json
Вы должны увидеть JSON-ответ от httpbin.org, похожий на тот, который был показан ранее.
Загрузка файлов и отслеживание прогресса
curl отлично подходит для загрузки файлов из интернета. На этом этапе вы узнаете, как загружать файлы и отслеживать прогресс загрузки.
Базовая загрузка файла
Для загрузки файла можно использовать опцию -o, о которой мы узнали ранее. Давайте загрузим образец изображения:
curl -o data/sample.jpg https://httpbin.org/image/jpeg
Эта команда загружает JPEG-изображение с httpbin.org и сохраняет его как sample.jpg в директории data.
Убедитесь, что файл был загружен:
ls -l data/sample.jpg
Загрузка с индикатором прогресса
При загрузке больших файлов полезно видеть прогресс. Вы можете использовать опцию -# для отображения индикатора прогресса:
curl -## -o data/sample_with_progress.jpg https://httpbin.org/image/jpeg
Вы должны увидеть индикатор прогресса, похожий на следующий:
######################################################################### 100.0%
Использование опции вывода файла с автоматическим именем
Если вы хотите использовать то же имя файла, что и у удаленного файла, можно использовать опцию -O (заглавная буква O):
cd data
curl -O https://httpbin.org/image/jpeg
cd ..
Эта команда загружает файл и сохраняет его как jpeg (последняя часть URL-адреса) в директории data.
Убедитесь, что файл был загружен:
ls -l data/jpeg
Продолжение прерванной загрузки
Если загрузка была прервана, вы можете продолжить ее с помощью опции -C -:
curl -C - -o data/resume_example.jpg https://httpbin.org/image/jpeg
Эта команда сообщает curl автоматически определить, с какого места продолжить загрузку.
Ограничение скорости загрузки
Вы можете ограничить скорость загрузки с помощью опции --limit-rate:
curl --limit-rate 100K -o data/rate_limited.jpg https://httpbin.org/image/jpeg
Это ограничивает скорость загрузки до 100 КБ/с.
Загрузка нескольких файлов
Вы можете загрузить несколько файлов одной командой:
curl -o data/image1.jpg https://httpbin.org/image/jpeg -o data/image2.png https://httpbin.org/image/png
Эта команда загружает JPEG- и PNG-изображения и сохраняет их соответственно как image1.jpg и image2.png.
Убедитесь, что оба файла были загружены:
ls -l data/image1.jpg data/image2.png
Резюме
В этом практическом занятии вы узнали, как использовать curl — мощный инструмент командной строки для передачи данных по URL-адресам. Теперь у вас есть практический опыт в следующих аспектах:
- Базовом использовании
curlдля получения веб-контента - Сохранении вывода
curlв файлы с использованием перенаправления и опции-o - Использовании продвинутых опций
curl, таких как режим подробного вывода (-v), настройка пользовательских заголовков (-H) и обработка перенаправлений (-L) - Работе с различными HTTP-методами (GET, POST, PUT, DELETE) и отправке данных
- Загрузке файлов и отслеживании прогресса загрузки
Эти навыки являются обязательными для многих задач в системном администрировании, веб-разработке, тестировании API и автоматизации скриптов. Команда curl широко используется в различных технических областях и доступна практически на всех дистрибутивах Linux, macOS и даже Windows.
По мере продолжения вашего пути в изучении Linux и сетей, помните, что curl имеет гораздо больше опций и возможностей, чем мы рассмотрели в этом практическом занятии. Вы всегда можете обратиться к руководству по curl (man curl) для получения дополнительной информации.



