자기 혐오 개발자
[Java]redirect된 url 가져오기. 본문
프로젝트 하는 중에 광고와 연계하는 과제가 있었다.
10ping이라는 광고 에이전시의 API를 사용해서, 광고하는 앱의 안드로이드 package 명을 가져오는 것이었다.
처음에는 iframe으로 해서 가져올려고 했더니, Denied Access가 발생. 크로스 도메인 문제인가 해서, 결국 자바 서버단에서 구현하기로 했다.
열심히 구글링을 했고, stackoverflow에서 해답을 얻었다.
// url 주소를 받아와서. 연결 시킨 후 리디렉션 된 url을 받아온다.
String url = String.valueOf(req.getParameter("url"));
URLConnection con = new URL(url).openConnection();
URL redirectUrl = getFinalURL(con.getURL());
-----------------------------------------------------------------------------------------------------------
public static URL getFinalURL(URL url) {
try {
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(false);
con.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36");
con.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
con.addRequestProperty("Referer", "https://www.google.com/");
con.connect();
// Header에서 Status Code를 뽑는다.
int resCode = con.getResponseCode();
// http코드가 301(영구이동), 302(임시 이동), 303(기타 위치 보기) 이면 또다시 이 함수를 태운다. 재귀함수.
if (resCode == HttpURLConnection.HTTP_SEE_OTHER || resCode == HttpURLConnection.HTTP_MOVED_PERM
|| resCode == HttpURLConnection.HTTP_MOVED_TEMP) {
String Location = con.getHeaderField("Location");
if (Location.startsWith("/")) {
Location = url.getProtocol() + "://" + url.getHost() + Location;
}
return getFinalURL(new URL(Location));
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
return url;
}
자세한 설명은 생략한다.
출처 : https://stackoverflow.com/questions/2659000/java-how-to-find-the-redirected-url-of-a-url
'Java,JSP' 카테고리의 다른 글
수정된 jsp 파일이 적용되지 않을때. (0) | 2018.05.29 |
---|---|
[Java]스프링 트랜잭션 Working Code (0) | 2018.05.21 |
[Java] Velocity. 스프링에 적용 (0) | 2018.05.18 |
[Java] Velocity 2탄. 스프링에 적용 [출처] [Java] Velocity 2탄. 스프링에 적용 (0) | 2018.05.15 |
[Java] Javax Mail 작동하는 코드 [출처] [Java] Javax Mail 작동하는 코드 (0) | 2018.05.15 |