티스토리 뷰

Full Video Download

  • Java URL Download를 이용하여 Video를 다운로드 하는 중 용량이 다소 큰 파일의 경우 Download가 되지 않는 현상이 발생했다.
  • 자세히 브라우저에서 확인해보니 요청을 보냈을 때 서버의 응답코드는 302 였다.
    • 클라이언트가 요청한 리소스가 Location 헤더에 주어진 URL에 일시적으로 이동되었음을 가리킴
  • 검색을 통해서 확인해보니 해당 서버에서 Video 데이터를 다른 위치로 redirect를 하는 경우가 있어 최종 redirect된 URL을 알아내는 방법으로 해결이 가능하다는 내용을 확인하였다.

해결방법

  • Java 코드로 해결하는 방법은 302 코드를 응답하는 경우 Location헤더에 담긴 URL로 다시 요청을 보내는 것이다.
    • 위 동작을 200 코드를 응답할 때까지 반복하여 최종 URL을 가져오는 것
  • 아래 코드는 해당 동작을 수행하는 메서드이다. (재귀로 동작)
    • 원하는 URL을 넘겨주면 최종 URL을 반환하는 메서드
public static String getFinalLocation(String address) throws IOException{
    URL url = new URL(address);
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    int status = conn.getResponseCode();
    if (status != HttpURLConnection.HTTP_OK) 
    {
        if (status == HttpURLConnection.HTTP_MOVED_TEMP
            || status == HttpURLConnection.HTTP_MOVED_PERM
            || status == HttpURLConnection.HTTP_SEE_OTHER)
        {
            String newLocation = conn.getHeaderField("Location");
            return getFinalLocation(newLocation);
        }
    }
    return address;
}

참고

 

How to get full video download from a link?

I am trying to download a video from a link, but it only downloads a small part of it, so it can't be watched at all. How would you download an entire video no matter how large the file is from a l...

stackoverflow.com

 

반응형
댓글