How can I download file with HTTPBuilder (HttpClient)?

fedor.belov picture fedor.belov · Nov 28, 2012 · Viewed 7.9k times · Source

I need to download and save file. I'm trying to use HTTPBuilder because it has simple API and supports cookies. I have written following code:

//create new httpBuilder and set cookies
def httpBuilder = ...
def file = ...  
def inputStream = httpBuilder.get(uri: urlData.url, contentType: ContentType.BINARY)
FileUtils.copyInputStreamToFile(inputStream)
  1. How can I check that file is correctly downloaded (not only the part of the file)?
  2. For large files exception java.lang.OutOfMemoryError: Java heap space occurs on line def inputStream = httpBuilder.get... How can I solve it?
  3. May be it's not best choise to download files by HTTPBuilder. What is the best way to download file with cookies support?

Answer

JasonM1 picture JasonM1 · Dec 10, 2012

Have you tried HttpBuilder GET request with custom response-handling logic:

httpBuilder.get(uri: urlData.url, contentType: ContentType.BINARY) { 
   resp, inputStream ->
       FileUtils.copyInputStreamToFile(inputStream)
}

If HttpBuilder has problems which is strange then you can always use the tried and true Apache HttpClient API which has full cookie support.

HttpGet req = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(req);
// validate response code, etc.
InputStream inputStream = response.getEntity().getContent();

You can add a localContext when executing the request to manage cookies.