1. Overview

This quick tutorial shows how to cancel an HTTP Request with the Apache HttpClient.

This is especially useful for potentially long-running requests or large download files that would otherwise unnecessarily consume bandwidth and connections.

If you want to dig deeper and learn other cool things, you can do with the HttpClient – head over to the main HttpClient tutorial.

2. Abort a GET Request

To abort an ongoing request, the client can use:

request.abort();

This will make sure that the client doesn’t have to consume the entire body of the request to release the connection:

@Test
void whenRequestIsCanceled_thenCorrect() throws IOException {
    HttpGet request = new HttpGet(SAMPLE_URL);
    try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
        httpClient.execute(request, response -> {
            HttpEntity entity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getCode());
            if (entity != null) {
                System.out.println("Response content length: " + entity.getContentLength());
            }
            System.out.println("----------------------------------------");
            if (entity != null) {
               // Closes this stream and releases any system resources
               entity.close();
            }
            // Do not feel like reading the response body
            // Call abort on the request object
            request.abort();

            assertThat(response.getCode()).isEqualTo(HttpStatus.SC_OK);
            return response;
        });
    }
}

3. Abort a GET Request (using HttpClient 4.5)

@Test
public final void whenRequestIsCanceled_thenCorrect() throws IOException {
    instance = HttpClients.custom().build();
    final HttpGet request = new HttpGet(SAMPLE_URL);
    response = instance.execute(request);

    try {
        final HttpEntity entity = response.getEntity();

        System.out.println("----------------------------------------");
        System.out.println(response.getStatusLine());
        if (entity != null) {
            System.out.println("Response content length: " + entity.getContentLength());
        }
        System.out.println("----------------------------------------");

        // Do not feel like reading the response body
        // Call abort on the request object
        request.abort();
    } finally {
        response.close();
    }
}

4. Conclusion

This article illustrated how to abort an ongoing request with the HTTP client. Another option to stop long-running requests is to ensure they will time out.

The implementation of all these examples and code snippets can be found in my GitHub project – this is an Eclipse-based project, so it should be easy to import and run as it is.

For HttpClient 4.x code snippets, please refer to our HttpClient 4 module.