Skip to content

Latest commit

History

391 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Http Request Build Status

A simple convenience library for using a HttpURLConnection to make requests and access the response.

Usage

The http-request library is available from Maven Central.

<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>5.4.1</version>
</dependency>

Javadocs are available here.

FAQ

Who uses this?

See here for a list of known projects using this library.

Why was this written?

This library was written to make HTTP requests simple and easy when using a HttpURLConnection.

Libraries like Apache HttpComponents are great but sometimes for either simplicity, or perhaps for the environment you are deploying to (Android), you just want to use a good old-fashioned HttpURLConnection. This library seeks to add convenience and common patterns to the act of making HTTP requests such as a fluid-interface for building requests and support for features such as multipart requests.

Bottom line: The single goal of this library is to improve the usability of the HttpURLConnection class.

What are the dependencies?

None. The goal of this library is to be a single class class with some inner static classes. The test project does require Jetty in order to test requests against an actual HTTP server implementation.

How are exceptions managed?

The HttpRequest class does not throw any checked exceptions, instead all low-level exceptions are wrapped up in a HttpRequestException which extends RuntimeException. You can access the underlying exception by catching HttpRequestException and calling getCause() which will always return the original IOException.

Examples

Perform a GET request and get the status of the response

intresponse = HttpRequest.get("http://google.com").code();

Perform a GET request and get the body of the response

Stringresponse = HttpRequest.get("http://google.com").body();
System.out.println("Response was: " + response);

Print the response of a GET request to standard out

HttpRequest.get("http://google.com").receive(System.out);

Adding query parameters

HttpRequestrequest = HttpRequest.get("http://google.com", true, 'q', "baseball gloves", "size", 100);
System.out.println(request.toString()); // GET http://google.com?q=baseball%20gloves&size=100

Working with request/response headers

StringcontentType = HttpRequest.get("http://google.com")
.accept("application/json") //Sets request header
.contentType(); //Gets response headerSystem.out.println("Response content type was " + contentType);

Perform a POST request with some data and get the status of the response

intresponse = HttpRequest.post("http://google.com").send("name=kevin").code();

Authenticate using Basic authentication

intresponse = HttpRequest.get("http://google.com").basic("username", "p4ssw0rd").code();

Perform a multipart POST request

HttpRequestrequest = HttpRequest.post("http://google.com");
request.part("status[body]", "Making a multipart request");
request.part("status[image]", newFile("/home/kevin/Pictures/ide.png"));
if (request.ok())
System.out.println("Status was updated");

Perform a POST request with form data

Map<String, String> data = newHashMap<String, String>();
data.put("user", "A User");
data.put("state", "CA");
if (HttpRequest.post("http://google.com").form(data).created())
System.out.println("User was created");

Copy body of response to a file

Fileoutput = newFile("/output/request.out");
HttpRequest.get("http://google.com").receive(output);

Post contents of a file

Fileinput = newFile("/input/data.txt");
intresponse = HttpRequest.post("http://google.com").send(input).code();

Using entity tags for caching

Filelatest = newFile("/data/cache.json");
HttpRequestrequest = HttpRequest.get("http://google.com");
//Copy response to filerequest.receive(latest);
//Store eTag of responseStringeTag = request.eTag();
//Later on check if changes existbooleanunchanged = HttpRequest.get("http://google.com")
.ifNoneMatch(eTag)
.notModified();

Using gzip compression

HttpRequestrequest = HttpRequest.get("http://google.com");
//Tell server to gzip response and automatically uncompressrequest.acceptGzipEncoding().uncompress(true);
Stringuncompressed = request.body();
System.out.println("Uncompressed response is: " + uncompressed);

Ignoring security when using HTTPS

HttpRequestrequest = HttpRequest.get("https://google.com");
//Accept all certificatesrequest.trustAllCerts();
//Accept all hostnamesrequest.trustAllHosts();

Configure HTTP proxy

HttpRequestrequest = HttpRequest.get("https://google.com");
//Configure proxyrequest.useProxy("localhost", 8080);
//Optional proxy basic authenticationrequest.proxyBasic("username", "p4ssw0rd");

Follow redirects

intcode = HttpRequest.get("http://google.com").followRedirects(true).code();

Custom connection factory

Looking to use this library with OkHttp? Read here.

HttpRequest.setConnectionFactory(newConnectionFactory() {
publicHttpURLConnectioncreate(URLurl) throwsIOException {
if (!"https".equals(url.getProtocol()))
thrownewIOException("Only secure requests are allowed");
return (HttpURLConnection) url.openConnection();
}
publicHttpURLConnectioncreate(URLurl, Proxyproxy) throwsIOException {
if (!"https".equals(url.getProtocol()))
thrownewIOException("Only secure requests are allowed");
return (HttpURLConnection) url.openConnection(proxy);
}
});

Contributors

About

Java HTTP Request Library

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors