میان افزار درخواست و پاسخ

رِستی امکان استفاده از میان افزار را برای اعمال نظارت بر درخواست‌ها قبل از ارسال و پاسخ‌ها بعد از دریافت فراهم می‌کند، که اجازه پردازش سفارشی از عملیات‌های درخواست و پاسخ را می‌دهد. این رویکرد انعطاف‌پذیرتر از توابع بازگشتی است.

// ایجاد یک مشتری رِستی
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()