میان افزار درخواست و پاسخ
رِستی امکان استفاده از میان افزار را برای اعمال نظارت بر درخواستها قبل از ارسال و پاسخها بعد از دریافت فراهم میکند، که اجازه پردازش سفارشی از عملیاتهای درخواست و پاسخ را میدهد. این رویکرد انعطافپذیرتر از توابع بازگشتی است.
// ایجاد یک مشتری رِستی
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 برگردانید، در غیر این صورت یک خطا برگردانید
})
هوک خطا
رِستی امکان هوک OnError را فراهم میکند که ممکن است در موارد زیر فراخوانی شود:
- مشتری ناتوان در ارسال یک درخواست، به دلیل انقضای ارتباط، شکست دستبهدست TLS، و غیره باشد.
- درخواست به حداکثر تعداد دفعات تکرار رسیده ولی همچنان ناموفق باشد.
اگر سرور پاسخ دهد، خطای اصلی در *resty.ResponseError
قرار خواهد گرفت که حاوی آخرین پاسخ دریافتی از سرور است.
// ایجاد یک مشتری رِستی
client := resty.New()
client.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response حاوی آخرین پاسخ سرور است
// v.Err حاوی خطای اصلی است
}
// ثبت خطاها، افزایش معیارها و غیره
})
سیاستهای هدایت
رِستی چندین سیاست موجود برای هدایت را فراهم میکند و امکان استفاده همزمان از چندین سیاست را دارد.
// ایجاد یک مشتری رِستی
client := resty.New()
// تنظیم سیاست هدایت برای مشتری. هر چه نیاز است یک سیاست ایجاد کنید
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// استفاده از چندین سیاست مانند شمارش هدایت، بررسی دامنه، و غیره
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
سیاست دلخواه هدایت
رابط RedirectPolicy را پیادهسازی کنید و آن را با مشتری رِستی ثبت کنید. لطفاً برای اطلاعات بیشتر به redirect.go مراجعه کنید.
// ایجاد یک مشتری رِستی
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
}
// در رِستی ثبت کنید
client.SetRedirectPolicy(CustomRedirectPolicy{/* متغیرها را مقدمه دهید */})
تنظیمات پروکسی
به طور پیشفرض، Go
از طریق متغیر محیطی HTTP_PROXY
پروکسی را پشتیبانی میکند. رِستی از طریق SetProxy
و RemoveProxy
پشتیبانی از پروکسی فراهم میکند. بنابراین، بر اساس نیازهای خود انتخاب کنید.
تنظیمات پروکسی در سطح مشتری برای همه درخواستها اعمال خواهد شد.
// ایجاد یک مشتری رِستی
client := resty.New()
// تنظیم URL و پورت پروکسی
client.SetProxy("http://proxyserver:8888")
// برای حذف تنظیمات پروکسی
client.RemoveProxy()