Как отправить HTTP-запрос из терминала (Linux/macOS)?

«Как отправить HTTP-запрос из терминала (Linux/macOS)?» — вопрос из категории Linux и командная строка, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Отправка HTTP-запросов из терминала — стандартная задача для тестирования API, отладки и автоматизации. Основные инструменты: cURL и HTTPie.

1. Использование cURL (универсальный, есть везде)

  • Базовый GET-запрос:
    curl https://api.example.com/v1/users
  • GET с заголовками и параметрами:
    curl -X GET 
         -H "Authorization: Bearer YOUR_TOKEN" 
         -H "Accept: application/json" 
         "https://api.example.com/v1/users?active=true&limit=10"
  • POST с JSON-телом:
    curl -X POST 
         -H "Content-Type: application/json" 
         -d '{"name": "John", "age": 30}' 
         https://api.example.com/v1/users
  • Полезные флаги для отладки:
    • -i – показать заголовки ответа.
    • -v – подробный вывод (verbose), показывает весь процесс обмена.
    • --connect-timeout 5 – таймаут на соединение.
    • --max-time 10 – общий таймаут операции.

2. Использование HTTPie (более удобный для API)

  • Установка: pip install httpie или через пакетный менеджер ОС.
  • GET-запрос (автоматически красиво печатает JSON):
    http GET https://api.example.com/v1/users Authorization:"Bearer YOUR_TOKEN"
  • POST с JSON (синтаксис проще):
    http POST https://api.example.com/v1/users name="John" age:=30
    • name="John" – строковый параметр.
    • age:=30 – числовой параметр (HTTPie сам преобразует в JSON-число).

3. Автоматизация и сложные сценарии

Для цепочек запросов (например, получение токена, а затем его использование) удобно писать shell-скрипты:

#!/bin/bash
# Получаем токен аутентификации
TOKEN=$(curl -s -X POST https://api.example.com/auth 
               -H "Content-Type: application/json" 
               -d '{"login":"user","password":"pass"}' 
               | jq -r '.access_token')

# Используем токен для получения данных
curl -H "Authorization: Bearer $TOKEN" https://api.example.com/data

(Для работы с JSON в bash часто используется утилита jq).