มัลติแต่ละอทย์คำสั่งกลางและคำตอบกลาง
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()