В этом уроке мы познакомимся с утилитой 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" }'
Самостоятельная работа
- Установите curl в вашу систему. Сделать это можно по нашей инструкции
- Выполните шаги из урока
С помощью curl создайте новую задачу.
Для этого вам понадобится отправить POST запрос на адрес https://http.hexlet.app/http-protocol/tasks с телом в формате JSON. Пример тела запроса для создания задачи:
{ "title": "Some title", "description": "Some description", "status": "Done" }
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.