Apache HttpComponents Client fluent API providing a simplified interface for HTTP operations
—
The Request class provides a fluent interface for building and configuring HTTP requests. All methods return the Request instance for method chaining.
Create HTTP requests using static factory methods for each HTTP method:
public static Request Get(String uri);
public static Request Get(URI uri);
public static Request Post(String uri);
public static Request Post(URI uri);
public static Request Put(String uri);
public static Request Put(URI uri);
public static Request Delete(String uri);
public static Request Delete(URI uri);
public static Request Head(String uri);
public static Request Head(URI uri);
public static Request Options(String uri);
public static Request Options(URI uri);
public static Request Patch(String uri);
public static Request Patch(URI uri);
public static Request Trace(String uri);
public static Request Trace(URI uri);// GET request
Request getRequest = Request.Get("https://api.example.com/users");
// POST request
Request postRequest = Request.Post("https://api.example.com/users");
// PUT request with URI object
URI uri = new URI("https://api.example.com/users/123");
Request putRequest = Request.Put(uri);Execute the configured request and get a Response object:
public Response execute() throws ClientProtocolException, IOException;
public void abort() throws UnsupportedOperationException;// Execute and get response
Response response = Request.Get("https://api.example.com/data").execute();
// Abort a request (if still in progress)
Request request = Request.Get("https://slow-api.example.com/data");
request.abort();Configure HTTP headers using various methods:
public Request addHeader(Header header);
public Request addHeader(String name, String value);
public Request setHeader(Header header);
public Request setHeader(String name, String value);
public Request removeHeader(Header header);
public Request removeHeaders(String name);
public Request setHeaders(Header... headers);
public Request setCacheControl(String cacheControl);
public Request setDate(Date date);
public Request setIfModifiedSince(Date date);
public Request setIfUnmodifiedSince(Date date);import org.apache.http.message.BasicHeader;
import java.util.Date;
Request request = Request.Post("https://api.example.com/data")
.addHeader("Authorization", "Bearer token123")
.addHeader("Content-Type", "application/json")
.setHeader(new BasicHeader("X-API-Version", "v1"))
.setCacheControl("no-cache")
.setDate(new Date())
.setIfModifiedSince(new Date(System.currentTimeMillis() - 86400000)); // 24 hours agoConfigure HTTP protocol settings:
public Request version(HttpVersion version);
public Request useExpectContinue();
public Request userAgent(String agent);import org.apache.http.HttpVersion;
Request request = Request.Post("https://api.example.com/upload")
.version(HttpVersion.HTTP_1_1)
.useExpectContinue()
.userAgent("MyApp/1.0");Configure connection timeouts and proxy settings:
public Request socketTimeout(int timeout);
public Request connectTimeout(int timeout);
public Request viaProxy(HttpHost proxy);
public Request viaProxy(String proxy);import org.apache.http.HttpHost;
Request request = Request.Get("https://api.example.com/data")
.connectTimeout(5000) // 5 second connection timeout
.socketTimeout(30000) // 30 second socket timeout
.viaProxy(new HttpHost("proxy.example.com", 8080))
.viaProxy("proxy.example.com:8080");Configure request body for entity-enclosing requests (POST, PUT, PATCH):
public Request body(HttpEntity entity);
public Request bodyString(String s, ContentType contentType);
public Request bodyFile(File file, ContentType contentType);
public Request bodyByteArray(byte[] b);
public Request bodyByteArray(byte[] b, ContentType contentType);
public Request bodyByteArray(byte[] b, int off, int len);
public Request bodyByteArray(byte[] b, int off, int len, ContentType contentType);
public Request bodyStream(InputStream inStream);
public Request bodyStream(InputStream inStream, ContentType contentType);
public Request bodyForm(Iterable<? extends NameValuePair> formParams);
public Request bodyForm(Iterable<? extends NameValuePair> formParams, Charset charset);
public Request bodyForm(NameValuePair... formParams);import org.apache.http.entity.ContentType;
import org.apache.http.client.fluent.Form;
import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.StandardCharsets;
// JSON string body
Request jsonRequest = Request.Post("https://api.example.com/users")
.bodyString("{\"name\":\"John\",\"email\":\"john@example.com\"}", ContentType.APPLICATION_JSON);
// File body
File file = new File("/path/to/document.pdf");
Request fileRequest = Request.Put("https://api.example.com/documents")
.bodyFile(file, ContentType.APPLICATION_OCTET_STREAM);
// Byte array body
byte[] data = "Hello World".getBytes(StandardCharsets.UTF_8);
Request byteRequest = Request.Post("https://api.example.com/data")
.bodyByteArray(data, ContentType.TEXT_PLAIN);
// Stream body
FileInputStream stream = new FileInputStream(file);
Request streamRequest = Request.Post("https://api.example.com/upload")
.bodyStream(stream, ContentType.APPLICATION_OCTET_STREAM);
// Form data body
Request formRequest = Request.Post("https://api.example.com/login")
.bodyForm(Form.form()
.add("username", "user")
.add("password", "pass")
.build());
// Form with custom charset
Request formWithCharset = Request.Post("https://api.example.com/submit")
.bodyForm(Form.form()
.add("comment", "Héllo Wörld")
.build(), StandardCharsets.UTF_8);public static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz";
public static final Locale DATE_LOCALE = Locale.US;
public static final TimeZone TIME_ZONE = TimeZone.getTimeZone("GMT");These methods are deprecated and have no effect:
@Deprecated public Request config(String param, Object object);
@Deprecated public Request removeConfig(String param);
@Deprecated public Request elementCharset(String charset);
@Deprecated public Request staleConnectionCheck(boolean b);Request methods can throw:
IllegalStateException - When trying to set body on non-entity-enclosing requests (GET, HEAD, etc.)UnsupportedOperationException - When calling abort() on completed requeststry {
// This will throw IllegalStateException
Request.Get("https://api.example.com/data")
.bodyString("data", ContentType.TEXT_PLAIN)
.execute();
} catch (IllegalStateException e) {
System.err.println("Cannot set body on GET request: " + e.getMessage());
}Install with Tessl CLI
npx tessl i tessl/maven-org-apache-httpcomponents--fluent-hc