We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Взаимодействие с API через curl и bash scripting в Termux

Termux – мощный терминальный эмулятор для Android, который предоставляет полноценную Linux‑среду. Благодаря доступу к пакетному менеджеру pkg и широкому набору утилит, в Termux можно реализовать полноценные скрипты для взаимодействия с внешними API. В этой статье мы разберём, как использовать curl совместно с Bash‑скриптами, чтобы отправлять запросы, обрабатывать ответы и автоматизировать задачи.

Установка необходимых инструментов

Для начала установим curl и jq (утилита для работы с JSON). Откройте Termux и выполните:

pkg update && pkg upgrade -y
pkg install curl jq -y

Команда curl будет использоваться для отправки HTTP‑запросов, а jq поможет парсить ответы в формате JSON.

Простой GET‑запрос

Самый базовый запрос к API выглядит так:

curl -s https://api.github.com/repos/termux/termux-app

Опция -s отключает вывод прогресс‑баров, делая вывод более чистым. Чтобы отформатировать ответ, используем jq:

curl -s https://api.github.com/repos/termux/termux-app | jq .full_name

POST‑запрос с JSON‑тело

Для отправки данных в формате JSON необходимо указать заголовок Content-Type: application/json и передать тело запроса через параметр -d:

curl -s -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"Test issue","body":"Created from Termux"}' \
  https://api.github.com/repos/username/repo/issues?access_token=YOUR_TOKEN

Обратите внимание, что токен доступа передаётся в строке запроса (для простоты), но более безопасно использовать заголовок Authorization:

curl -s -X POST \
  -H "Authorization: token YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Test issue","body":"Created from Termux"}' \
  https://api.github.com/repos/username/repo/issues

Аутентификация и хранение токенов

Хранить токен в открытом виде в скрипте небезопасно. Рекомендуется сохранять его в файле с ограниченными правами доступа:

echo "YOUR_TOKEN" > $HOME/.api_token
chmod 600 $HOME/.api_token

Затем в скрипте считываем токен:

API_TOKEN=$(cat $HOME/.api_token)

И используем переменную в запросе:

curl -s -H "Authorization: token $API_TOKEN" https://api.example.com/user

Обработка ошибок

Для надёжного скрипта важно проверять HTTP‑коды и наличие ошибок в ответе. Пример функции, возвращающей код статуса и тело ответа:

api_request() {
  local method=$1
  local url=$2
  local data=$3
  local response
  local http_code

  if [[ -n $data ]]; then
    response=$(curl -s -w "
%{http_code}" -X "$method" -H "Authorization: token $API_TOKEN" -H "Content-Type: application/json" -d "$data" "$url")
  else
    response=$(curl -s -w "
%{http_code}" -X "$method" -H "Authorization: token $API_TOKEN" "$url")
  fi

  http_code=$(echo "$response" | tail -n1)
  body=$(echo "$response" | sed '$d')

  echo "$http_code" "$body"
}

# Пример использования
read status body < <(api_request GET "https://api.example.com/data")
if [[ $status -ge 200 && $status -lt 300 ]]; then
  echo "Успешно: $(echo $body | jq .)"
else
  echo "Ошибка $status: $body" >&2
fi

Парсинг JSON‑ответов с jq

Утилита jq позволяет извлекать нужные поля без сложных регулярных выражений. Пример получения списка репозиториев пользователя GitHub:

curl -s -H "Authorization: token $API_TOKEN" https://api.github.com/users/username/repos \
  | jq -r '.[].full_name'

Опция -r выводит строки без кавычек.

Создание переиспользуемых функций

Один из преимуществ Bash‑скриптов – возможность собрать набор функций в отдельный файл и подключать его в других скриптах. Создадим файл api_lib.sh:

# api_lib.sh
#!/usr/bin/env bash

API_TOKEN=$(cat $HOME/.api_token)

api_get() {
  local url=$1
  curl -s -H "Authorization: token $API_TOKEN" "$url"
}

api_post() {
  local url=$1
  local json=$2
  curl -s -X POST -H "Authorization: token $API_TOKEN" -H "Content-Type: application/json" -d "$json" "$url"
}

В основном скрипте подключаем библиотеку:

source $HOME/api_lib.sh
response=$(api_get "https://api.example.com/status")
echo $response | jq .

Автоматизация с помощью планировщика (Termux:cron)

Для периодической отправки запросов удобно использовать crontab. Установим пакет cronie и запустим демон:

pkg install cronie -y
sv-enable crond
sv start crond

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

(crontab -l 2>/dev/null; echo "0     $HOME/check_status.sh") | crontab -

Содержимое check_status.sh:

#!/usr/bin/env bash
source $HOME/api_lib.sh
api_get "https://api.example.com/status" | jq . > $HOME/status_$(date +%Y%m%d_%H).json

Лучшие практики

  • Храните секреты (токены, пароли) в файлах с правами 600 или используйте termux‑secret.
  • Проверяйте HTTP‑коды и обрабатывайте ошибки, чтобы скрипт не «падал» без сообщения.
  • Логируйте запросы и ответы в отдельный файл для отладки.
  • Не забывайте про таймауты: --max-time 30 ограничит время ожидания ответа.
  • Для больших объёмов данных используйте потоковую передачу (--data-binary @file.json).

Заключение

Termux предоставляет полноценную Linux‑среду на мобильных устройствах, а сочетание curl, jq и Bash‑скриптов позволяет эффективно работать с любыми веб‑API. Вы можете автоматизировать мониторинг, интегрировать сторонние сервисы и даже создавать небольшие микросервисы, управляя всем этим прямо со смартфона.

Если вам нужна профессиональная настройка Termux, разработка комплексных скриптов или интеграция API в ваш бизнес‑процесс, команда RybinskLab готова помочь. Мы предоставляем услуги по разработке, аудиту безопасности и обучению работе с Linux‑инструментами на Android. Свяжитесь с нами, чтобы вывести автоматизацию на новый уровень.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом RybinskLab.

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю IT-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса.

Связаться со мной
Поддержать проект