Зарегистрируйтесь, чтобы продолжить обучение

Curl Протокол HTTP

В этом уроке мы познакомимся с утилитой curl — мощным инструментом для выполнения HTTP-запросов. Эта утилита командной строки позволяет управлять различными параметрами запросов с помощью флагов, что значительно упрощает процесс взаимодействия с веб-сервисами.

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

Утилита широко распространена и активно используется для скачивания файлов и в скриптах автоматизации. В документации многих сервисов можно найти примеры выполнения запросов с использованием curl.

В состав некоторых операционных систем curl уже включена по умолчанию. Если у вас ее нет, то установите ее по нашей инструкции

Самый простой способ использовать curl — это выполнить GET-запрос к какому-то сайту используя полный адрес:

curl http.hexlet.app/http-protocol/example

# Тело ответа
Done!

В таком варианте curl распечатает на экран тело ответа — в нашем случае это строка Done!. Его можно сохранить в файл, выполнив перенаправление:

curl http.hexlet.app/http-protocol/example > example.html

Если мы хотим посмотреть заголовки ответа, то запрос станет таким:

# --head - запрос с методом HEAD
curl --head http.hexlet.app/http-protocol/example

HTTP/1.1 200 OK
Date: Tue, 22 Oct 2024 07:54:48 GMT
Content-Type: text/html; charset=ISO-8859-1
Connection: keep-alive
...

В таком случае curl отправляет HEAD-запрос, на который сервер должен вернуть заголовки без тела. По спецификации заголовки, возвращаемые в случае HEAD-запроса, должны совпадать с заголовками GET-запроса. Но на практике ответ зависит от настроек сервера. Поэтому для точности лучше выполнить GET-запрос:

# -X, --request - задает метод запроса
# --head в этом случае игнорирует тело при выводе
curl --head -X GET http.hexlet.app/http-protocol/example

HTTP/2 200
HTTP/1.1 200 OK
Date: Tue, 22 Oct 2024 07:56:45 GMT
Content-Type: text/html; charset=ISO-8859-1
Connection: keep-alive
...

Если нужно увидеть не только ответ, но и запрос, то подойдет флаг -v или его полная версия --verbose. Он покажет все, включая тело ответа:

# Вывод сокращен
# -v, --verbose
curl -v http.hexlet.app/http-protocol/example
*   Trying 172.67.139.244:80...
* Connected to http.hexlet.app (172.67.139.244) port 80 (#0)
> GET /http-protocol/example HTTP/1.1
> Host: http.hexlet.app
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 22 Oct 2024 07:59:39 GMT
< Content-Type: text/html; charset=ISO-8859-1
< Transfer-Encoding: chunked
< Connection: keep-alive
...

# Тело
Done!

При работе с curl мы можем указывать различные заголовки запроса, чтобы передать дополнительную информацию на сервер. Для этого используется флаг -H или --header.

Например, если мы хотим указать, что данные, которые мы отправляем, имеют формат JSON, мы можем использовать следующий команду:

# -H, --header
curl -H "Content-Type: application/json" https://http.hexlet.app/http-protocol/users

Когда мы отправляем данные на сервер, например, при создании нового пользователя, мы можем использовать флаг -d для указания тела запроса:

# \ - нужен для указания многострочного кода в терминале
curl -X POST https://http.hexlet.app/http-protocol/users \
   -H "Content-Type: application/json" \
   -d '{ "firstName": "Sam", "lastName": "Johnson", "email": "samj@mail.com", "password": "secret" }'

Самостоятельная работа

  1. Установите curl в вашу систему. Сделать это можно по нашей инструкции
  2. Выполните шаги из урока
  3. С помощью curl создайте новую задачу.

    Для этого вам понадобится отправить POST запрос на адрес https://http.hexlet.app/http-protocol/tasks с телом в формате JSON. Пример тела запроса для создания задачи:

    {
    "title": "Some title",
    "description": "Some description",
    "status": "Done"
    }
    

Дополнительные материалы

  1. Статья про Curl на Habr
  2. Инструкция по установке Curl

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 26 декабря
профессия
от 14 960 ₸ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря
профессия
от 39 525 ₸ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 26 декабря
профессия
от 25 000 ₸ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»