Промежуточное программное обеспечение запроса и ответа
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()