Передача данных по URL в Linux

LinuxBeginner
Практиковаться сейчас

Введение

Добро пожаловать в лабораторную работу по передаче данных по 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

Эта команда:

  1. Использует режим подробного вывода (-v)
  2. Следует за перенаправлениями (-L)
  3. Сохраняет вывод в файл data/redirect_example.txt
  4. Запрашивает контент с 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-адресам. Теперь у вас есть практический опыт в следующих аспектах:

  1. Базовом использовании curl для получения веб-контента
  2. Сохранении вывода curl в файлы с использованием перенаправления и опции -o
  3. Использовании продвинутых опций curl, таких как режим подробного вывода (-v), настройка пользовательских заголовков (-H) и обработка перенаправлений (-L)
  4. Работе с различными HTTP-методами (GET, POST, PUT, DELETE) и отправке данных
  5. Загрузке файлов и отслеживании прогресса загрузки

Эти навыки являются обязательными для многих задач в системном администрировании, веб-разработке, тестировании API и автоматизации скриптов. Команда curl широко используется в различных технических областях и доступна практически на всех дистрибутивах Linux, macOS и даже Windows.

По мере продолжения вашего пути в изучении Linux и сетей, помните, что curl имеет гораздо больше опций и возможностей, чем мы рассмотрели в этом практическом занятии. Вы всегда можете обратиться к руководству по curl (man curl) для получения дополнительной информации.