Промежуточное программное обеспечение запроса и ответа

Resty позволяет использовать промежуточное программное обеспечение для перехвата запросов перед и ответов после, что позволяет осуществлять настраиваемую обработку операций запроса и ответа. Этот подход более гибкий, чем функции обратного вызова.

// Создание клиента Resty
client := resty.New()

// Регистрация промежуточного программного обеспечения для запросов
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    // Теперь вы можете получить доступ к клиенту и текущему объекту запроса
    // Выполните необходимые операции

    return nil  // Верните nil в случае успеха, в противном случае верните ошибку
  })

// Регистрация промежуточного программного обеспечения для ответов
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
    // Теперь вы можете получить доступ к клиенту и текущему объекту ответа
    // Выполните необходимые операции

    return nil  // Верните nil в случае успеха, в противном случае верните ошибку
  })

Хуки ошибок

Resty предоставляет хук OnError, который может быть вызван в следующих случаях:

  • Клиент не может отправить запрос из-за истечения времени ожидания подключения, сбоя выполнения TLS-согласования и т. д.
  • Запрос был повторно выполнен максимальное количество раз, но все равно завершился неудачей.

Если сервер отвечает, исходная ошибка будет обернута в *resty.ResponseError, который содержит последний полученный ответ.

// Создание клиента Resty
client := resty.New()

client.OnError(func(req *resty.Request, err error) {
  if v, ok := err.(*resty.ResponseError); ok {
    // v.Response содержит последний ответ сервера
    // v.Err содержит исходную ошибку
  }
  // Ведение журнала ошибок, увеличение метрик и т. д.
})

Политики перенаправления

Resty предоставляет несколько доступных политик перенаправления и поддерживает одновременное использование нескольких политик.

// Создание клиента Resty
client := resty.New()

// Установка политики перенаправления для клиента. Создайте политику по мере необходимости
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))

// Использование нескольких политик, таких как количество перенаправлений, проверка домена и т. д.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
                        resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))

Настраиваемая политика перенаправления

Реализуйте интерфейс RedirectPolicy и зарегистрируйте его в клиенте Resty. Пожалуйста, обратитесь к redirect.go для получения дополнительной информации.

// Создание клиента Resty
client := resty.New()

// Использование исходной функции с resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  // Реализуйте здесь свою логику

  // Верните nil для продолжения перенаправления или верните ошибку для остановки/предотвращения перенаправления
  return nil
}))

//---------------------------------------------------

// Создание более гибкой политики перенаправления с использованием структуры
type CustomRedirectPolicy struct {
  // Определите переменные здесь
}

func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
  // Реализуйте здесь свою логику

  // Верните nil для продолжения перенаправления или верните ошибку для остановки/предотвращения перенаправления
  return nil
}

// Регистрация в Resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Инициализация переменных */})

Настройки прокси

По умолчанию Go поддерживает прокси через переменную окружения HTTP_PROXY. Resty предоставляет поддержку прокси через SetProxy и RemoveProxy. Выберите в соответствии с вашими потребностями.

Настройки прокси на уровне клиента будут применены ко всем запросам.

// Создание клиента Resty
client := resty.New()

// Установка URL и порта прокси
client.SetProxy("http://proxyserver:8888")

// Для удаления настроек прокси
client.RemoveProxy()