Тайм-ауты и повторные попытки
Урок 45 из 47 курса Сетевое взаимодействие в терминале на Coddy.
По умолчанию curl ждёт очень долго. В скрипте это ошибка: один недоступный хост — и ваша задача зависает, пока кто-нибудь это не заметит.
curl -s --max-time 5 --connect-timeout 2 URL--connect-timeout ограничивает время, отведённое на установление соединения. --max-time ограничивает длительность всей операции. При превышении любого из этих ограничений возвращается код выхода 28.
Повторная попытка требует большей осторожности, чем кажется. Повторять неудачный GET или PUT безопасно, поскольку оба метода идемпотентны. Повторение POST может создать вторую запись, и тайм-аут в этом случае — худший сценарий: вы так и не узнаете, была ли обработана первая попытка.
Поэтому чтение можно свободно повторять, а перед повторением операций записи стоит подумать. Когда это необходимо, запросите у сервера способ сделать операцию безопасной, например ключ идемпотентности.
Задание
СреднеУстановите ограничение для запроса, на который никогда не будет получен ответ.
Отправьте запрос к http://10.255.255.1/ — адресу, который молча поглощает трафик, прекратите попытки через 2 секунды и выведите gave up: , за которым следует код завершения curl.
Ожидаемый вывод:
gave up: 28Без тайм-аута этот запрос завис бы более чем на минуту.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Сетевое взаимодействие в терминале
3Порты и сокеты
Что такое портХорошо известные портыЛокальный хостПрослушивание и подключениеПовторение: порты6curl в деталях
Просмотр заголовковСохранение ответовПользовательские заголовкиСтатус и время выполненияКоды выхода curlПовторение: флаги curl9Аутентификация и отладка
API-ключи и BearerUser-AgentТайм-ауты и повторные попыткиАнализ ошибкиПовторение: отладкаПотренируйтесь самостоятельно: Песочница Terminal