Square's meticulous HTTP client for Java and Kotlin
—
HTTP URL parsing, building, and manipulation with full RFC compliance.
Immutable URL with builder pattern for construction and modification.
class HttpUrl private constructor() {
val scheme: String
val username: String
val password: String
val host: String
val port: Int
val pathSize: Int
val pathSegments: List<String>
val querySize: Int
val queryParameterNames: Set<String>
val fragment: String?
val isHttps: Boolean
fun pathSegment(index: Int): String
fun queryParameter(name: String): String?
fun queryParameterValue(index: Int): String?
fun queryParameterName(index: Int): String
fun queryParameterValues(name: String): List<String>
fun encodedQuery(): String?
fun query(): String?
fun encodedFragment(): String?
fun encodedPath(): String
fun encodedUsername(): String
fun encodedPassword(): String
fun pathSegments(): List<String>
fun redact(): HttpUrl
fun resolve(link: String): HttpUrl?
fun newBuilder(): Builder
fun newBuilder(link: String): Builder?
fun toUrl(): URL
fun toUri(): URI
class Builder {
fun scheme(scheme: String): Builder
fun username(username: String): Builder
fun encodedUsername(encodedUsername: String): Builder
fun password(password: String): Builder
fun encodedPassword(encodedPassword: String): Builder
fun host(host: String): Builder
fun port(port: Int): Builder
fun addPathSegment(pathSegment: String): Builder
fun addPathSegments(pathSegments: String): Builder
fun addEncodedPathSegment(encodedPathSegment: String): Builder
fun addEncodedPathSegments(encodedPathSegments: String): Builder
fun setPathSegment(index: Int, pathSegment: String): Builder
fun setEncodedPathSegment(index: Int, encodedPathSegment: String): Builder
fun removePathSegment(index: Int): Builder
fun encodedPath(encodedPath: String): Builder
fun query(query: String?): Builder
fun encodedQuery(encodedQuery: String?): Builder
fun addQueryParameter(name: String, value: String?): Builder
fun addEncodedQueryParameter(encodedName: String, encodedValue: String?): Builder
fun setQueryParameter(name: String, value: String?): Builder
fun setEncodedQueryParameter(encodedName: String, encodedValue: String?): Builder
fun removeAllQueryParameters(name: String): Builder
fun removeAllEncodedQueryParameters(encodedName: String): Builder
fun fragment(fragment: String?): Builder
fun encodedFragment(encodedFragment: String?): Builder
fun build(): HttpUrl
}
companion object {
fun parse(url: String): HttpUrl?
fun get(url: String): HttpUrl
fun get(url: URL): HttpUrl
fun get(uri: URI): HttpUrl
}
}// Parse existing URL
val url = "https://api.example.com/users?page=1".toHttpUrl()
// Build URL programmatically
val apiUrl = HttpUrl.Builder()
.scheme("https")
.host("api.example.com")
.addPathSegment("users")
.addPathSegment("123")
.addQueryParameter("include", "profile")
.addQueryParameter("format", "json")
.build()
// Modify existing URL
val modifiedUrl = url.newBuilder()
.addQueryParameter("limit", "50")
.addPathSegment("details")
.build()Install with Tessl CLI
npx tessl i tessl/maven-com-squareup-okhttp3--okhttp