HTTP_OK (200)가 아닌 HTTP_MOVED_TEMP (302), HTTP_MOVED_PERM (301) 예외가 발생할 때가
있다. 두 가지 형태로 처리할 수 있을 거 같은데 하나는 Exception을 던져 더 이상 진행하지 못하게 하는 것이고 다른 하나는 Redirect된 URL을 새로 받아 처리하는 방식이다.
다시 Connect 한다.
출처: http://love4rh.blogspot.kr/2013/05/httpurlconnection-301-302.html
public InputStream GetHTTPInputStream(URL url) throws Exception { int redirectedCount = 0 ; while ( redirectedCount <= 1 ) // Redirection 1번 허용 { HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setConnectTimeout( 10000 ); //< 연결 제한시간(단위 : msec, 0은 무한) httpConn.setReadTimeout( 0 ); //< 읽기 제한시간(단위 : msec, 0은 무한) httpConn.setUseCaches( false ); //< 캐시 사용 여부 설정(기본 설정: true) // URL을 요청하는 방법 설정 (GET|POST|HEAD|OPTIONS|PUT|DELETE|TRACE
httpConn.setRequestMethod( "GET" ); int resCode = httpConn.getResponseCode(); if ( resCode == HttpsURLConnection.HTTP_OK ) { return httpConn.getInputStream(); } // Redirection 발생하는 경우 else if ( resCode == HttpsURLConnection.HTTP_MOVED_TEMP || resCode == HttpsURLConnection.HTTP_MOVED_PERM ) { // Redirected URL 받아오기 String redirectedUrl = httpConn.getHeaderField( "Location" ); url = new URL(redirectedUrl); } // 이외의 오류는 Exception 처리 else
throw new MalformedURLException( "can not connect to the url [" + url.toString() + "] Code: " + resCode); } ++redirectedCount; } }
|
참고로 HttpClient 는 아래와 같이 사용하면 된다.
[version 3.x]
// GetMethod has followRedirects flag set to true by default PostMethod postMethod = ...;
// if you are using httpcomponents httpclient.setRedirectStrategy(new DefaultRedirectStrategy());
|
[version 4.1]
DefaultHttpClient httpclient = new DefaultHttpClient(); httpClient.setRedirectStrategy(new DefaultRedirectStrategy() { { );
|
[version 4.2 later]
DefaultHttpClient client = new DefaultHttpClient()
|
[펌] [Android] WebView 화면 크기 맞추기 (이미지, 레이아웃) (0) | 2014.04.20 |
---|---|
[펌] 멀티 윈도우에 내가 만든 어플을 추가해 보자 (0) | 2014.04.20 |
[펌] RESTful Java client with Apache HttpClient (0) | 2014.04.09 |
[펌] 안드로이드/Android HttpUrlConnection Request 설명 및 설정 하기 (header, get, post, body등.) (0) | 2014.04.08 |
[펌] 안드로이드 JNI 콜백 호출 기법 (0) | 2014.03.31 |