/** * Gets a part of the given URL, writes the content into the given channel. * Fails if the returned HTTP status is not "206 partial content". * * @param <IWC> a generic type for any class that implements InterruptibleChannel and WritableByteChannel * @param url to get * @param output written with the content of the HTTP response * @param etag value of the If-Range header * @param range_start range byte start (inclusive) * @param range_end range byte end (inclusive) * * @return a response (contains the HTTP Headers, the status code, ...) * * @throws IOException IO error * @throws InterruptedException interrupted * @throws RuntimeException containing the actual exception if it is not an instance of IOException */ public <IWC extends InterruptibleChannel & WritableByteChannel> HttpResponse interruptibleGetRange(String url, final IWC output, String etag, long range_start, long range_end) throws IOException, InterruptedException { HttpGet get = new HttpGet(url); get.setHeader("If-Range", etag); get.setHeader("Range", String.format("bytes=%d-%d", range_start, range_end)); // This validator throws an IOException if the response code is not 206 partial content ResponseValidator val = new ResponseValidator() { @Override public void validate(HttpResponse response) throws HttpException, IOException { if (response.getStatusLine().getStatusCode() != HttpStatus.SC_PARTIAL_CONTENT) { throw new IOException("Range request does not return partial content"); } } }; return interruptibleRequest(get, output, val); }
/** * Gets the given URL, writes the content into the given channel. * * @param <IWC> a generic type for any class that implements * InterruptibleChannel and WritableByteChannel. * @param url to get. * @param output written with the content of the HTTP response. * * @return a response (contains the HTTP Headers, the status code, ...). * * @throws IOException IO error. * @throws InterruptedException interrupted. * @throws RuntimeException containing the actual exception if it is not an * instance of IOException. */ public <IWC extends InterruptibleChannel & WritableByteChannel> HttpResponse interruptibleGet(String url, final IWC output) throws IOException, InterruptedException { return interruptibleRequest(new HttpGet(url), output, null); }
/** * Deletes the given URL, writes the content into the given channel. * * @param <IWC> a generic type for any class that implements * InterruptibleChannel and WritableByteChannel. * @param url to delete. * @param output written with the content of the HTTP response. * * @return a response (contains the HTTP Headers, the status code, ...). * * @throws IOException IO error. * @throws InterruptedException interrupted. * @throws RuntimeException containing the actual exception if it is not an * instance of IOException. */ public <IWC extends InterruptibleChannel & WritableByteChannel> HttpResponse interruptibleDelete(String url, final IWC output) throws IOException, InterruptedException { return interruptibleRequest(new HttpDelete(url), output, null); }
/** * Gets the given URL, writes the content into the given channel. * * @param <IWC> a generic type for any classe that implements * InterruptibleChannel and WritableByteChannel. * @param url to get. * @param output written with the content of the HTTP response. * * @return a response (contains the HTTP Headers, the status code, ...). * * @throws IOException IO error. * @throws InterruptedException interrupted. * @throws RuntimeException containing the actual exception if it is not an * instance of IOException. */ public <IWC extends InterruptibleChannel & WritableByteChannel> HttpResponse interruptibleGet(String url, final IWC output) throws IOException, InterruptedException { return interruptibleRequest(new HttpGet(url), output); }
/** * Deletes the given URL, writes the content into the given channel. * * @param <IWC> a generic type for any classe that implements * InterruptibleChannel and WritableByteChannel. * @param url to delete. * @param output written with the content of the HTTP response. * * @return a response (contains the HTTP Headers, the status code, ...). * * @throws IOException IO error. * @throws InterruptedException interrupted. * @throws RuntimeException containing the actual exception if it is not an * instance of IOException. */ public <IWC extends InterruptibleChannel & WritableByteChannel> HttpResponse interruptibleDelete(String url, final IWC output) throws IOException, InterruptedException { return interruptibleRequest(new HttpDelete(url), output); }