Для тестирования HTTP API одного браузера недостаточно. Браузером можно пользоваться только в самых простых ситуациях, где не нужно выставлять заголовки и делать запросы, отличные от GET. Во всех остальных случаях нужны более мощные и специализированные инструменты. Одним из таких инструментов мы научимся пользоваться в этом уроке.
Curl — это утилита командной строки, созданная в 1998 году. Она невероятно распространена и активно используется для скачивания файлов и в скриптах автоматизации. В документации по API у многих сервисов есть примеры того, как выполнить запрос с использованием curl.
Утилита curl включена по умолчанию в состав некоторых операционных систем. Если у вас ее нет, то установите ее такой командой:
# macos
brew install curl
# ubuntu, windows (wsl)
apt install curl
Проверьте, что все работает:
curl --version
curl 7.79.1
Самый простой способ использовать curl — это выполнить GET-запрос к какому-то сайту:
curl https://code-basics.com
# Здесь появится тело ответа
В таком варианте curl распечатает на экран тело ответа — в нашем случае, HTML сайта. Его можно сохранить в файл, выполнив перенаправление:
curl https://code-basics.com > code-basics.html
Если мы хотим посмотреть заголовки ответа, то запрос станет таким:
# --head - запрос с методом HEAD
curl --head https://code-basics.com
HTTP/2 200
date: Thu, 28 Apr 2022 22:19:39 GMT
content-type: text/html; charset=utf-8
cache-control: max-age=0, private, must-revalidate
...
В таком случае curl отправляет HEAD-запрос, на который сервер должен вернуть заголовки без тела. По спецификации заголовки, возвращаемые в случае HEAD-запроса, должны совпадать с заголовками GET-запроса. Но на практике ответ зависит от настроек сервера. Поэтому для точности лучше выполнить GET-запрос:
# -X, --request - задает метод запроса
# --head в этом случае игнорирует тело при выводе
curl --head -X GET https://code-basics.com
HTTP/2 200
date: Thu, 28 Apr 2022 22:19:39 GMT
content-type: text/html; charset=utf-8
cache-control: max-age=0, private, must-revalidate
...
Если нужно увидеть не только ответ, но и запрос, то подойдет флаг --verbose. Он покажет все, включая тело ответа:
# Вывод сокращен
# -v, --verbose
curl -v https://code-basics.com
* Trying 104.26.0.21:443...
* Connected to code-basics.com (104.26.0.21) port 443 (#0)
* SSL connection using TLSv1.3 / AEAD-AES256-GCM-SHA384
> GET / HTTP/2
> Host: code-basics.com
> user-agent: curl/7.79.1
> accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 256)!
< HTTP/2 200
< date: Thu, 28 Apr 2022 22:24:06 GMT
< content-type: text/html; charset=utf-8
< referrer-policy: strict-origin-when-cross-origin
< cache-control: max-age=0, private, must-revalidate
<
# Тут еще и тело
Указание заголовков:
# -H, --header
curl -H "Content-Type: application/json" https://dummyjson.com/users
Указание тела в запросе:
# \ - нужен для указания многострочного кода в терминале
curl -X POST https://dummyjson.com/users/add \
-H "Content-Type: application/json" \
-d '{ "firstName": "Sam", "age": 100 }'
Самостоятельная работа
-
Установите curl в вашу систему
-
С помощью curl выполните CRUD-операции для Todos
Обратите внимание, что на сервере изменения не выполняются, поэтому результатом успешного выполнения запроса будет HTTP-ответ.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.