Skip to content

Configuration

Previous versions of unirest had configuration split across several different places. Sometimes it was done on Unirest, sometimes it was done on Option, sometimes it was somewhere else. All configuration is now done through Unirest.config()

    Unirest.config()
           .connectTimeout(1000)
           .proxy(new Proxy("https://proxy"))
           .setDefaultHeader("Accept", "application/json")
           .followRedirects(false)
           .enableCookieManagement(false)
           .addInterceptor(new MyCustomInterceptor());

Changing Unirest's config should ideally be done once, or rarely. Once Unirest has been activated configuration options that are involved in creating the client cannot be changed without an explicit shutdown or reset.

Config Options

Builder Method Impact Default
clientCertificateStore(String,String) Add a PKCS12 KeyStore by path for doing client certificates
clientCertificateStore(KeyStore,String) Add a PKCS12 KeyStore for doing client certificates
connectTimeout(int) Sets the connection timeout for all requests in millis 10000
connectionTTL(Duration) Add total time to live (TTL) by Duration. Good for moderns Java APIs. -1
connectionTTL(long,TimeUnit) Total time to live (TTL) defines maximum life span of persistent connections regardless of their expiration setting. No persistent connection will be re-used past its TTL value. -1
cookieSpec(String) set a cookie policy. Acceptable values: 'default' (same as Netscape), 'netscape', 'ignoreCookies', 'standard' (RFC 6265 interoprability profile) , 'standard-strict' (RFC 6265 strict profile) default
defaultBaseUrl(String value) Set a default base URL to be used for all requests that do not already contain a scheme
setDefaultHeader(String, String) Sets a default header. Will overwrite if it exists
setDefaultHeader(String, Supplier<String>) Sets a default header by supplier. Good for setting trace tokens for microservice architectures. Will overwrite if it exists
addDefaultHeader(String, String) Adds a default header. Multiple for the same name can exist
addDefaultHeader(String, Supplier<String>) Add a default header by supplier. Good for setting trace tokens for microservice architectures.
setDefaultBasicAuth(String, String) Add a default Basic Auth Header
enableCookieManagement(boolean) toggle accepting and storing cookies true
errorHandler(Consumer<HttpResponse<?>> consumer) Set a global error handler that will be invoked for any status > 400 or a parsing error
followRedirects(boolean) toggle following redirects true
interceptor(Interceptor value) Set a global Interceptor handler that will be invoked before and after each request
proxy(proxy) Sets a proxy object for negotiating proxy servers. Can include auth credentials
requestTimeout(int) Sets the request timeout for all requests in millis none (infinite)
retryAfter(boolean) Automatically retry synchronous requests on 429/529 responses with the Retry-After response header false
retryAfter(boolean,int) Automatically retry synchronous requests on 429/529 responses with the Retry-After response header as well as number of attempts false
verifySsl(boolean) toggle enforcing SSL true

Global Interceptor

You can set a global interceptor for your configuration. This is invoked before and after each request. This can be useful for logging or injecting common attributes.

See Interceptor.java for details.

Multiple Configurations

As usual, Unirest maintains a primary single instance. Sometimes you might want different configurations for different systems. You might also want an instance rather than a static context for testing purposes.

    // this returns the same instance used by Unirest.get("http://somewhere/")
    UnirestInstance unirest = Unirest.primaryInstance();
    // It can be configured and used just like the static context
    unirest.config().connectTimeout(5000);
    String result = unirest.get("http://foo").asString().getBody();

    // You can also get a whole new instance
    UnirestInstance unirest = Unirest.spawnInstance();

Object Mappers

Unirest offers a few different Object Mapper's based on popular JSON libraries (Jackson and GSON).

<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-modules-jackson</artifactId>
</dependency>

<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-modules-gson</artifactId>
</dependency>

If you have some other need you can supply your own Object mapper by implementing the ObjectMapper interface. It has only a few methods

Metrics

Unirest has hooks for collecting metrics on your runtime code. This is a simple and lightweight framework that marks two events: 1. The moment just before the actual request is made 1. The moment just after the actual request is made

Context information like method and request path are given to you so that you can collect based on whatever your needs are. In its simplest form it might look like this:

   Unirest.config().instrumentWith(requestSummary -> {
              long startNanos = System.nanoTime();
              return (responseSummary,exception) -> logger.info("path: {} status: {} time: {}",
                      requestSummary.getRawPath(),
                      responseSummary.getStatus(),
                      System.nanoTime() - startNanos);
   });

By providing more feature rich UniMetric instances you could easily calculate averages per route, uptime, or other fun facts.