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. Свяжитесь с нами, чтобы вывести автоматизацию на новый уровень.