2016-07-27 1 views
1

나는 이러한 특성으로 HTTP 클라이언트를 사용하여 HTTP 호출을하고 싶습니다 :Golang : http 클라이언트가 리디렉션을 따르지 않도록 만드는 방법은 무엇입니까?

  • 이 따르지 않는 리디렉션
  • (단지 302 리디렉션 코드를 반환 첫 번째 통화의 전체 반응을 얻을) 쿠키 따라서

을받을 수있는, 차라리 내가 그걸 어떻게 할 수 trasport.RoundTrip

보다 http.Client있는 솔루션을 찾고 있어요?

+0

쿠키를 저장하는 방법은 리디렉션 응답을 확인하는 방법과 완전히 별개입니다. – JimB

+0

네, 그건 까다로운 부분입니다. HTTP 클라이언트 대신 transport.RoundTrip을 사용하여 단일 응답을 얻을 수 있지만 쿠키를 검색 할 수있는 솔루션을 찾고 있습니다. –

+0

http.Client를 사용할 때 CookieJar가 작동하지 않지만 첫 번째 리디렉션에서 멈추는가? – JimB

답변

9

http.Client을 사용하는 경우 CheckRedirectfield을 사용할 수 있습니다.

이 필드는 초기 요청에 의해 오류가 수신되면 모든 리디렉션을 처리 할 수있는 사용자 지정 기능을 사용합니다.

client: &http.Client{ 
    CheckRedirect: func(req *http.Request, via []*http.Request) error { 
     return errors.New("something bad happened") // or maybe the error from the request 
    }, 
} 

또한 닫히지 않은 몸으로 가장 최근의 응답을 반환 http.ErrUseLastResponseerror을 반환 할 수 :

간단한 예는 다음과 같이 될 수 있습니다.

+0

위대한! 응답 302의 경우 리디렉션이 수행되지 않도록 모든 샘플 코드를 제공 할 수 있습니까? –

+0

@DanieleB - 간단한 구현을 보여주기 위해 제 대답을 업데이트했습니다. – danbondd

+0

고마워요,하지만 어떻게 사용해야하는지 잘 모르겠습니다. 내가 원한 것은 : 1) 클라이언트가 리다이렉트를 따라 가면 안된다. 2) 리디렉션 URL을 얻을 수 있습니다. 3) CookieJar가 정상적으로 작동합니다. –

관련 문제