Middleware yêu cầu và phản hồi
Resty cung cấp khả năng sử dụng middleware để ngăn chặn yêu cầu trước và phản hồi sau, cho phép xử lý tùy chỉnh các hoạt động yêu cầu và phản hồi. Phương pháp này linh hoạt hơn so với các hàm callback.
// Tạo một client Resty
client := resty.New()
// Đăng ký middleware yêu cầu
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Bây giờ bạn có thể truy cập client và đối tượng yêu cầu hiện tại
// Thực hiện các hoạt động cần thiết
return nil // Trả về nil nếu thành công, nếu không trả về một lỗi
})
// Đăng ký middleware phản hồi
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Bây giờ bạn có thể truy cập client và đối tượng phản hồi hiện tại
// Thực hiện các hoạt động cần thiết
return nil // Trả về nil nếu thành công, nếu không trả về một lỗi
})
Lỗi Hooks
Resty cung cấp một OnError hook, có thể được gọi trong các trường hợp sau:
- Client không thể gửi yêu cầu do hết thời gian kết nối, lỗi kết nối TLS, v.v.
- Yêu cầu đã được thử lại số lần tối đa nhưng vẫn thất bại.
Nếu máy chủ phản hồi, lỗi gốc sẽ được bọc trong *resty.ResponseError
, chứa phản hồi cuối cùng nhận được.
// Tạo một client Resty
client := resty.New()
client.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response chứa phản hồi cuối cùng từ server
// v.Err chứa lỗi gốc
}
// Ghi nhật ký lỗi, tăng số liệu, v.v.
})
Chính sách điều hướng lại
Resty cung cấp một số chính sách điều hướng lại có sẵn và hỗ trợ việc sử dụng đồng thời nhiều chính sách.
// Tạo một client Resty
client := resty.New()
// Đặt chính sách điều hướng lại cho client. Tạo một chính sách khi cần thiết
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Sử dụng nhiều chính sách, như số lần điều hướng lại, kiểm tra tên miền, v.v.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
Chính sách đổi hướng tùy chỉnh
Triển khai giao diện RedirectPolicy và đăng ký nó với client resty. Vui lòng tham khảo redirect.go để biết thêm thông tin.
// Tạo một client Resty
client := resty.New()
// Sử dụng hàm gốc với resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Triển khai logic của bạn ở đây
// Trả về nil để tiếp tục đổi hướng, hoặc trả về một lỗi để dừng/ngăn chặn đổi hướng
return nil
}))
//---------------------------------------------------
// Tạo một chính sách điều hướng linh hoạt hơn bằng cách sử dụng một cấu trúc
type CustomRedirectPolicy struct {
// Định nghĩa các biến ở đây
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// Triển khai logic của bạn ở đây
// Trả về nil để tiếp tục đổi hướng, hoặc trả về một lỗi để dừng/ngăn chặn đổi hướng
return nil
}
// Đăng ký trong resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Khởi tạo các biến */})
Thiết lập Proxy
Mặc định, Go
hỗ trợ proxy thông qua biến môi trường HTTP_PROXY
. Resty cung cấp hỗ trợ proxy thông qua SetProxy
và RemoveProxy
. Chọn tùy theo nhu cầu của bạn.
Thiết lập proxy ở mức client sẽ được áp dụng cho tất cả các yêu cầu.
// Tạo một client Resty
client := resty.New()
// Đặt URL và cổng proxy
client.SetProxy("http://proxyserver:8888")
// Để loại bỏ thiết lập proxy
client.RemoveProxy()