static void download(final DownloadJob job) throws IOException { final HttpURLConnection connection = (HttpURLConnection) job.url.openConnection(); connection.setRequestMethod("GET"); if (job.headers != null) { for (final Entry<String, String> e : job.headers.entrySet()) { connection.addRequestProperty(e.getKey(), e.getValue()); } } connection.connect(); job.responseCode = connection.getResponseCode(); job.responseHeaders.clear(); job.responseText = null; for (int i = 1; ; i++) { final String key = connection.getHeaderFieldKey(i); if (key == null) { break; } final String value = connection.getHeaderField(i); job.responseHeaders.put(key.toLowerCase(), value); } final StringBuilder sb = new StringBuilder(); final BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); try { for (int ch = r.read(); ch != -1; ch = r.read()) { sb.append((char) ch); } job.responseText = sb.toString(); } finally { r.close(); } }