Обработка сетевых ошибок, таймауты — Grab 0.6.30 documentation

### Navigation

- index
- modules |
- next |
- previous |
- Grab 0.6.30 documentation »

# Обработка сетевых ошибок, таймауты

## Сетевые ошибки

Если в результате сетевого запроса происходит ошибка, Grab генерирует `GrabNetworkError` исключение. Что такое сетевая ошибка? Сервер может вообще не устанавливать соединение по нашему запросу или он может вернуть HTTP-ответ с кодом отличным от 2** (см Статусы HTTP ответа). Любой запрос с кодом отличным от 2** или 404 считается ошибкой и генерируется `GrabNetworkError` исключение. Нужно ли считать 404 ошибкой - спорный вопрос. Мне удобнее обрабатывать этот случай как нормальный ответ сервера. Возможно, нужна опция, устанавливающая какие коды ответа считать неошибочными.

## Таймауты

Вы можете настроить максимальное время ожидания начала передачи данных от сервера опцией connect_timeout и максимальное время на весь процесс отправки запроса-прёма данных опцией timeout.

В случае превышение заданного времени, будет сгенерировано `GrabTimeoutError` исключение.

## Режим повторных запросов

В случае активации опции hammer_mode Grab переключается в режим повторной отсылки того же запроса в случае сетевой ошибки. Количество повторных запросов и их таймауты настраиваются опцией hammer_timeouts. Рассмотрим пример:

    g.setup(hammer_mode=True, hammer_timeouts=((2, 5), (10, 15), (20, 30)))
    g.go('http://some/url')

Это значит, что первый сетевой запрос будет произведён с настройками connect_timeout=2, timeout=5. В случае timeout-ошибки или получения ответа с кодом отличным от успешного (см. обработка сетевых ошибок), запрос будет произведён ещё раз, но на этот раз с настройками connect_timeout=10, timeout=15. Если повторный запрос окончится неудачей будет проивзденё последний третий запрос с натройками connect_timeout=20, timeout=30. Надеюсь, вы поняли принцип.

### Navigation

- index
- modules |
- next |
- previous |
- Grab 0.6.30 documentation »