طلب وسيط الاستجابة والاستجابة
يوفر Resty القدرة على استخدام الوسيط لالتقاط الطلبات قبل والردود بعد ذلك، مما يسمح بمعالجة مخصصة لعمليات الطلب والاستجابة. تعتبر هذه الطريقة أكثر مرونة من وظائف الاستدعاء.
// إنشاء عميل Resty
client := resty.New()
// تسجيل وسيط للطلب
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// يمكنك الآن الوصول إلى العميل وكائن الطلب الحالي
// أداء العمليات حسب الحاجة
return nil // إرجاع قيمة فارغة إذا كانت ناجحة، وإلا قم بإرجاع خطأ
})
// تسجيل وسيط للاستجابة
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// يمكنك الآن الوصول إلى العميل وكائن الاستجابة الحالي
// أداء العمليات حسب الحاجة
return nil // إرجاع قيمة فارغة إذا كانت ناجحة، وإلا قم بإرجاع خطأ
})
خطوط الخطأ
يوفر Resty خطأ افتراضي، والذي يمكن أن يتم استدعاؤه في الحالات التالية:
- عدم قدرة العميل على إرسال طلب بسبب انتهاء مهلة الاتصال، فشل مصافحة 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 {
// ينفذ منطقك هنا
// إرجاع قيمة فارغة لمواصلة إعادة التوجيه، أو إرجاع خطأ لوقف/منع إعادة التوجيه
return nil
}))
//---------------------------------------------------
// إنشاء سياسة إعادة توجيه أكثر مرونة باستخدام هيكل
type CustomRedirectPolicy struct {
// حدد المتغيرات هنا
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// ينفذ منطقك هنا
// إرجاع قيمة فارغة لمواصلة إعادة التوجيه، أو إرجاع خطأ لوقف/منع إعادة التوجيه
return nil
}
// تسجيل في resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* قم بتهيئة المتغيرات */})
إعدادات البروكسي
بشكل افتراضي، يدعم Go
البروكسي من خلال متغير البيئة HTTP_PROXY
. يوفر Resty دعمًا للبروكسي من خلال SetProxy
و RemoveProxy
. اختر وفقًا لاحتياجاتك.
سيتم تطبيق إعدادات البروكسي على مستوى العميل على جميع الطلبات.
// إنشاء عميل Resty
client := resty.New()
// تعيين عنوان URL ومنفذ البروكسي
client.SetProxy("http://proxyserver:8888")
// لإزالة إعدادات البروكسي
client.RemoveProxy()