2014-04-06 10 views
1

GET 요청으로 다른 서버의 이미지를 서버 측에 요청하고 싶습니다. 상태 코드 200으로 요청하는 서버 응답이 정상적으로 작동하면. 하지만 종종 상태 코드로 리디렉션 된 302가 표시됩니다. 이 경우 response.body이 필요하지 않습니다.서버가 Grails에서 302로 응답 할 때 응답 본문을 얻는 방법?

페이스 북에서 사용자 이미지를 검색하는 데 사용하는 코드입니다. 페이 스북이 리다이렉트하기 때문에 나는 response.body가 아닌 상태 코드로 302를 얻는다.

def uri = new URI("http://graph.facebook.com/1000345345345/picture?width=200&height=200") 
def requestFactory = new SimpleClientHttpRequestFactory() 

def request = requestFactory.createRequest(uri, HttpMethod.GET) 

try { 
     def response = request.execute() 
     def statusCode = response.statusCode 
     if (statusCode == HttpStatus.FOUND) { 
      log.debug "302" 
      // how do I get the response body? 
     } 

     if (statusCode == HttpStatus.OK) { 
      return response.body.bytes 
     } 
     else if(statusCode == HttpStatus.FORBIDDEN) { 
      throw new IllegalAccessError(response.statusCode.toString()) 
     } 
} catch(ex) { 
    log.error "Exception while querying $url", ex 
} 
return null 

302의 경우 정확한 응답 본문을 얻으려면 어떻게해야합니까?

+1

302에는 일반적으로 응답 본문이 포함되어 있지 않습니다. 대신 요청을 수행하고 리디렉션 된 URI로 이동해야합니다. –

+0

@SotiriosDelimanolis GET 요청이 자동으로 리디렉션 될 것으로 생각했습니다. 그게 아닌가? 리디렉션 URI를 얻으려면 어떻게해야합니까? – confile

+0

죄송합니다. 귀하의 HTTP 클라이언트를 알 수 없습니다. 뒤따라 지나갈 수있는 설정이있을 수 있습니다. –

답변

1

사용할 수 있습니다. 당신이 방법은 다음과 같습니다

def queryUrl(url, ...) {} 

당신은 사용할 수 있습니다 :이 리디렉션 된 URL을 요청합니다

 if (statusCode == HttpStatus.FOUND) { 
      def newUrl = response.connection.responses.getHeaders().Location[0] 
      log.debug "302 redirect to ${newUrl}" 
      return queryUrl(newUrl, "") 
     } 

.

관련 문제