HTTP request요청시 redirect 하는 방법 및 예제코드
안드로이드 앱을 만들다보면 http로 request를 보냈는데, 서버에서 url주소를 redirect해서 response를 보내주는 경우가 있다.
그럼 개발자가 의도한 동작이나 입력한 주소로는 요청이 안되게 된다. 이걸 해결하기위해서는 java에서 redirect된 주소로 다시 요청을 해줘야 한다.
상당히 귀찮다.
예제를 보여주겠다. 이를 응용하거나, 바로 가져다 사용하면 귀찮은 작업을 덜 수 있다.
private InputStream openConnectionCheckRedirects(URLConnection c) throws IOException
{
boolean redir;
int redirects = 0;
InputStream in = null;
do
{
if (c instanceof HttpURLConnection)
{
((HttpURLConnection) c).setInstanceFollowRedirects(false);
}
in = c.getInputStream();
redir = false;
if (c instanceof HttpURLConnection)
{
HttpURLConnection http = (HttpURLConnection) c;
int stat = http.getResponseCode();
if (stat >= 300 && stat <= 307 && stat != 306 &&
stat != HttpURLConnection.HTTP_NOT_MODIFIED)
{
URL base = http.getURL();
String loc = http.getHeaderField("Location");
URL target = null;
if (loc != null)
{
target = new URL(base, loc);
}
http.disconnect();
if (target == null || !(target.getProtocol().equals("http")
|| target.getProtocol().equals("https"))
|| redirects >= 5)
{
throw new SecurityException("illegal URL redirect");
}
redir = true;
c = target.openConnection();
redirects++;
}
}
}
while (redir);
return in;
}
public void makeConnection(URL url){
URLConnection conn = url.openConnection();
InputStream is = openConnectionCheckRedirects(conn);
/* request에 대한 결과 처리 부분*/
is.close();
}
이런식으로 하면 되겠다. 서버에서 제공하는 API가 redirect된 주소로 해서 보내주는 경우가 많기에... 이 방법을 써서 해결하게 되었다.
만약 개선할 점이 있거나, 더 좋은 방법이 있다면 언제든지 댓글로 남겨주시면 좋을 것 같다.
'개발자의 기록 노트 > Android' 카테고리의 다른 글
[안드로이드] 증강현실 구현을 위한 기초 개념, 벡터(Vector)와 노름(Norm) (0) | 2010.12.25 |
---|---|
[안드로이드] 안드로이드 화면이 회전될 때 어플리케이션 개발자가 주의해야할 점 (0) | 2010.12.25 |
[안드로이드] 카메라 해상도 바꾸기 (0) | 2010.12.21 |
[안드로이드/Tip] LogCat 한글 메시지 확인하기 (1) | 2010.12.04 |
[안드로이드] 웹뷰를 통한 apk 파일 다운로드 및 제어 (0) | 2010.12.03 |
[안드로이드/GUI] 안드로이드의 레이아웃과 계층구조 (0) | 2010.11.28 |