An HTTP & SPDY client for Android and Java applications with efficient connection pooling, interceptors, and modern protocol support
—
URL handling, header management, media type parsing, and HTTP protocol utilities.
HTTP/HTTPS URL with parsing, encoding, and building capabilities.
public final class HttpUrl {
public static HttpUrl parse(String url);
public static HttpUrl get(URL url);
public static HttpUrl get(URI uri);
public static int defaultPort(String scheme);
public URL url();
public URI uri();
public String scheme();
public boolean isHttps();
public String host();
public int port();
public String encodedPath();
public List<String> pathSegments();
public String encodedQuery();
public String query();
public String queryParameter(String name);
public List<String> queryParameterValues(String name);
public Set<String> queryParameterNames();
public String encodedFragment();
public String fragment();
public String redact();
public HttpUrl resolve(String link);
public Builder newBuilder();
public Builder newBuilder(String link);
public static final class Builder {
public Builder();
public Builder scheme(String scheme);
public Builder username(String username);
public Builder password(String password);
public Builder host(String host);
public Builder port(int port);
public Builder addPathSegment(String pathSegment);
public Builder addEncodedPathSegment(String encodedPathSegment);
public Builder setPathSegment(int index, String pathSegment);
public Builder setEncodedPathSegment(int index, String encodedPathSegment);
public Builder removePathSegment(int index);
public Builder encodedPath(String encodedPath);
public Builder query(String query);
public Builder encodedQuery(String encodedQuery);
public Builder addQueryParameter(String name, String value);
public Builder addEncodedQueryParameter(String name, String value);
public Builder setQueryParameter(String name, String value);
public Builder setEncodedQueryParameter(String name, String value);
public Builder removeAllQueryParameters(String name);
public Builder fragment(String fragment);
public Builder encodedFragment(String encodedFragment);
public HttpUrl build();
}
}Usage Examples:
// Parse and build URLs
HttpUrl url = HttpUrl.parse("https://api.example.com/users");
HttpUrl newUrl = url.newBuilder()
.addQueryParameter("page", "2")
.addQueryParameter("limit", "50")
.build();
// Build URL from scratch
HttpUrl builtUrl = new HttpUrl.Builder()
.scheme("https")
.host("api.example.com")
.addPathSegment("v1")
.addPathSegment("users")
.addQueryParameter("active", "true")
.fragment("top")
.build();
// URL manipulation
HttpUrl baseUrl = HttpUrl.parse("https://example.com/api");
HttpUrl resolvedUrl = baseUrl.resolve("../v2/users?sort=name");
// Access URL components
String scheme = url.scheme(); // "https"
String host = url.host(); // "api.example.com"
int port = url.port(); // 443 (default HTTPS port)
List<String> segments = url.pathSegments(); // ["users"]
String queryParam = url.queryParameter("page"); // "2"Construct URLs programmatically with the HttpUrl.Builder.
/**
* Builder for constructing HttpUrl instances.
*/
public static final class Builder {
public Builder();
public Builder scheme(String scheme);
public Builder username(String username);
public Builder password(String password);
public Builder host(String host);
public Builder port(int port);
public Builder addPathSegment(String pathSegment);
public Builder addEncodedPathSegment(String encodedPathSegment);
public Builder setPathSegment(int index, String pathSegment);
public Builder setEncodedPathSegment(int index, String encodedPathSegment);
public Builder removePathSegment(int index);
public Builder encodedPath(String encodedPath);
public Builder query(String query);
public Builder encodedQuery(String encodedQuery);
public Builder addQueryParameter(String name, String value);
public Builder addEncodedQueryParameter(String name, String value);
public Builder setQueryParameter(String name, String value);
public Builder setEncodedQueryParameter(String name, String value);
public Builder removeAllQueryParameters(String name);
public Builder fragment(String fragment);
public Builder encodedFragment(String encodedFragment);
public HttpUrl build();
}Usage Examples:
// Complex URL building
HttpUrl complexUrl = new HttpUrl.Builder()
.scheme("https")
.username("user")
.password("pass")
.host("secure.api.example.com")
.port(8443)
.addPathSegment("api")
.addPathSegment("v2")
.addPathSegment("search")
.addQueryParameter("q", "java http client")
.addQueryParameter("limit", "10")
.addQueryParameter("sort", "relevance")
.fragment("results")
.build();
// Dynamic query building
HttpUrl.Builder builder = HttpUrl.parse("https://api.example.com/search").newBuilder();
Map<String, String> filters = getSearchFilters();
for (Map.Entry<String, String> filter : filters.entrySet()) {
builder.addQueryParameter(filter.getKey(), filter.getValue());
}
HttpUrl searchUrl = builder.build();
// Path manipulation
HttpUrl apiUrl = new HttpUrl.Builder()
.scheme("https")
.host("api.example.com")
.addPathSegment("users")
.addPathSegment("123")
.addPathSegment("profile")
.build(); // https://api.example.com/users/123/profileImmutable HTTP headers collection with case-insensitive name matching.
public final class Headers {
public static Headers of(String... namesAndValues);
public static Headers of(Map<String, String> headers);
public String get(String name);
public Date getDate(String name);
public int size();
public String name(int index);
public String value(int index);
public Set<String> names();
public List<String> values(String name);
public Builder newBuilder();
public Map<String, List<String>> toMultimap();
}RFC 2045 Media Type for HTTP content with parsing capabilities.
public final class MediaType {
public static MediaType parse(String string);
public String type();
public String subtype();
public Charset charset();
public Charset charset(Charset defaultValue);
}Usage Examples:
// Work with headers
Headers headers = new Headers.Builder()
.add("Content-Type", "application/json")
.add("Authorization", "Bearer token")
.build();
// Access header values
String contentType = headers.get("Content-Type");
List<String> acceptValues = headers.values("Accept");
Set<String> headerNames = headers.names();
// Convert to map
Map<String, List<String>> headerMap = headers.toMultimap();
// Parse media types
MediaType json = MediaType.parse("application/json; charset=utf-8");
Charset charset = json.charset(); // UTF-8
// Media type operations
MediaType plainText = MediaType.parse("text/plain");
String type = plainText.type(); // "text"
String subtype = plainText.subtype(); // "plain"Utility class for creating HTTP authentication credentials.
public final class Credentials {
public static String basic(String userName, String password);
}Usage Examples:
// Basic authentication
String authHeader = Credentials.basic("user123", "secretpass");
Request request = new Request.Builder()
.url("https://api.example.com/protected")
.header("Authorization", authHeader)
.build();
// Use with interceptor
client.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request authenticated = original.newBuilder()
.header("Authorization", Credentials.basic("username", "password"))
.build();
return chain.proceed(authenticated);
}
});Install with Tessl CLI
npx tessl i tessl/maven-com-squareup-okhttp--okhttp