요청과 응답 미들웨어

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는 SetProxyRemoveProxy를 통해 프록시 지원을 제공합니다. 필요에 따라 선택하십시오.

클라이언트 수준의 프록시 설정은 모든 요청에 적용됩니다.

// Resty 클라이언트 생성
client := resty.New()

// 프록시 URL 및 포트 설정
client.SetProxy("http://proxyserver:8888")

// 프록시 설정 제거
client.RemoveProxy()