--- title: Добавить middleware description: Оберните логический вызов или отдельную попытку отправки. sources: - eazy_sdk.middleware - eazy_sdk.clients.CallOptions api_fingerprint: "sha256:ea26ac1242b2271c449171232fcf48ed6ababf53e500c056a1eed001e0f310c3" --- Два уровня, две задачи. `CallMiddleware` видит один вызов SDK целиком, включая все его повторы. `AttemptMiddleware` работает с одной подготовкой и отправкой HTTP-запроса. ```{literalinclude} ../../../../../examples/docs/middleware.py :language: python :start-after: "# region docs: middleware" :end-before: "# endregion docs: middleware" ``` `call_next(context)` является одноразовой возможностью. Вызовите её ровно один раз и верните результат либо типизированную ошибку. Порядок нескольких middleware похож на вложенные функции: первый зарегистрированный входит первым и выходит последним. :::{dropdown} Файл целиком ```{literalinclude} ../../../../../examples/docs/middleware.py :language: python ``` ::: ```text ready start:getStatus finish:getStatus ``` ## Выбрать hook попытки | Hook | Допустимый результат | |---|---| | `contribute(context)` | `ValuePatch` до подготовки запроса | | `before_emit(context)` | `Continue`, `Fail` или `None` | | `after_response(context)` | `Continue`, `ReplaceResponse`, `ProposeAction` или `Fail` | | `on_transport_error(context)` | `Continue`, `ProposeAction` или `Fail` | Глобальные middleware задаются через `ClientConfig(hooks=Hooks(...))`. Для одного вызова укажите регистрацию в `CallOptions` метода `send(...)`; остальная конфигурация клиента останется прежней. Captcha оформляется guard, а обновление токена управляемой сессией. Middleware не должно создавать для них второй путь выполнения. ## Дальше - {doc}`Настроить retry ` - {doc}`Обработать защитную проверку ` - {doc}`Справочник middleware `