Що таке curl і як працювати з ним у терміналі

Автор: Опубліковано

Коротко: curl — це інструмент командного рядка для передавання даних між комп’ютером і сервером. Він дає змогу, зокрема, завантажити файл, перевірити відповідь сайту й надіслати дані до API — інтерфейсу, через який програми взаємодіють між собою. curl працює без графічного браузера, тому корисний для діагностики й автоматизації.

Для чого потрібен curl і чим він відрізняється від браузера?

curl запускають у терміналі: вводять команду, адресу та, за потреби, параметри, які визначають його роботу. Інструмент підтримує різні протоколи зв’язку, зокрема HTTP і HTTPS, які використовують вебсайти. На практиці його часто застосовують для перевірки вебсервісів і роботи з API.

Браузер завантажує сторінку, інтерпретує її код і відображає інтерфейс. curl за замовчуванням виводить отримані дані в термінал — наприклад, код HTML або відповідь у форматі JSON. Це текстовий формат даних, який використовують багато API. curl не виконує код JavaScriptu і не відображає сторінку, тому не замінює перевірку її вигляду та роботи в браузері.

Наприклад, якщо форма на сайті не працює, curl може допомогти перевірити, чи приймає сервер запит і як на нього відповідає. Проте він не покаже, чи правильно кнопка форми пов’язана з кодом JavaScript.

Із curl пов’язана бібліотека libcurl, яку розробники можуть використовувати у власних застосунках. Команда curl запускає готову програму, а libcurl — це набір функцій для створення програмного забезпечення, яке передає дані.

Як перевірити наявність інструмента й виконати перший запит?

Відкрийте термінал і введіть:

curl --version

Якщо curl доступний, ви побачите номер версії та інформацію про підтримувані функції. Якщо система не розпізнає команду, встановіть інструмент через менеджер пакунків своєї системи або за офіційною інструкцією проєкту curl. Доступність протоколів і параметрів може залежати від версії та способу збирання програми.

У деяких старіших середовищах Windows PowerShell назва curl може вказувати на іншу команду. У такому разі використайте curl.exe, щоб запустити потрібну програму.

Найпростіший запит має такий вигляд:

curl https://example.com

Для адреси HTTP або HTTPS curl за замовчуванням виконує запит GET, тобто запит на отримання ресурсу. Відповідь надходить у стандартний потік виведення, зазвичай у термінал. Адреси зі спеціальними символами, як-от &, беріть у лапки, щоб оболонка не сприймала ці символи як елементи власного синтаксису.

Як перевірити заголовки та перенаправлення?

Заголовки HTTP — це інформація, що супроводжує запит або відповідь, наприклад тип переданого вмісту та вказівки щодо кешування. Щоб запросити в сервера лише заголовки відповіді, використайте:

curl -I https://example.com

Параметр -I надсилає запит HEAD. Не кожен сервер обробляє його так само, як GET. Якщо хочете побачити заголовки відповіді на звичайне завантаження сторінки разом із її вмістом, застосуйте -i.

curl за замовчуванням не переходить за перенаправленнями HTTP. Параметр -L дає змогу перейти за адресою, яку вказав сервер:

curl -i -L https://example.com

Код 200 зазвичай означає успішну відповідь, 404 — відсутність ресурсу, а 500 — помилку на боці сервера. Однак сам код не доводить, що сторінка працює правильно: відповідь 200 може містити повідомлення про проблему замість очікуваних даних.

Для докладнішої діагностики слугує параметр -v, який показує, зокрема, подробиці з’єднання та заголовки запитів і відповідей. Перш ніж ділитися таким записом, видаліть токени, файли cookie та іншу конфіденційну інформацію.

Як завантажити файл і надіслати дані до API?

Щоб зберегти відповідь у файл, а не виводити її в термінал, використайте параметр -o:

curl -f -L -o dokument.pdf https://example.com/dokument.pdf

Це приклад синтаксису — вказаний файл не обов’язково існує. -o задає локальне ім’я файлу, -L забезпечує перехід за перенаправленнями, а -f спричиняє повідомлення про помилку, коли відповідь HTTP вказує на невдачу, як правило, починаючи з коду 400. Без -f curl може завершити роботу успішно, навіть отримавши сторінку помилки. Запис у наявний файл може перезаписати його вміст.

Надсилання даних до API може мати такий вигляд:

curl -i https://api.example.com/items -H "Content-Type: application/json" --data '{"name":"test"}'

Параметр -H додає заголовок, а --data передає тіло запиту й за замовчуванням вибирає метод POST, який часто використовують для надсилання даних. Цей приклад розрахований на термінал, що підтримує синтаксис оболонки Bash; правила використання лапок у Windows можуть відрізнятися. Фактичну адресу, обов’язкові поля та спосіб автентифікації перевірте в документації конкретного API.

Як безпечно користуватися curl?

curl може не лише зчитувати дані, а й виконувати операції, які змінюють стан сервісу. Перш ніж запускати чужу команду, перевірте адресу призначення, дані, що надсилаються, і параметри. Виклик API може створити запис, видалити ресурс або запустити платну операцію.

Не використовуйте параметр -k або --insecure як звичну практику: він вимикає перевірку сертифіката TLS, який допомагає підтвердити справжність сервера. Краще з’ясувати причину помилки сертифіката, ніж приховати її. Також не запускайте завантажений скрипт, не перевіривши його вміст, особливо командою, що передає результат curl безпосередньо оболонці.

Для початку отримайте загальнодоступний ресурс за допомогою curl -i, перегляньте код відповіді та заголовки й лише потім переходьте до запитів, які надсилають дані.

Дивіться також: Що таке API?

Читайте також

Дізнайтеся, як PHP-FPM обробляє запити PHP, чим відрізняється від вебсервера та як налаштувати процеси під трафік і ресурси хостингу.
Дізнайтеся, як BIND обслуговує DNS, чим відрізняються його серверні ролі та коли варто розгортати його самостійно замість керованої послуги.
Дізнайтеся, що означають польський реєстр і номер REGON, чим вони відрізняються від NIP та KRS і як перевірити дані підприємства.