Skip to content

Commit f03ee6b

Browse files
committed
#25 - ENH: Add option to HttpContextBuilder to set proxy, sslContext, sslParameters, authenticator and priority.
1 parent 1602a02 commit f03ee6b

File tree

2 files changed

+94
-2
lines changed

2 files changed

+94
-2
lines changed

http-client/client/src/main/java/io/avaje/http/client/DHttpClientContextBuilder.java

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package io.avaje.http.client;
22

3+
import javax.net.ssl.SSLContext;
4+
import javax.net.ssl.SSLParameters;
5+
import java.net.Authenticator;
36
import java.net.CookieHandler;
47
import java.net.CookieManager;
8+
import java.net.ProxySelector;
59
import java.net.http.HttpClient;
610
import java.time.Duration;
711
import java.util.ArrayList;
@@ -23,6 +27,11 @@ class DHttpClientContextBuilder implements HttpClientContext.Builder {
2327
private HttpClient.Redirect redirect = HttpClient.Redirect.NORMAL;
2428
private HttpClient.Version version;
2529
private Executor executor;
30+
private ProxySelector proxy;
31+
private SSLContext sslContext;
32+
private SSLParameters sslParameters;
33+
private Authenticator authenticator;
34+
private int priority;
2635

2736
private final List<RequestIntercept> interceptors = new ArrayList<>();
2837
private final List<RequestListener> listeners = new ArrayList<>();
@@ -102,6 +111,36 @@ public HttpClientContext.Builder withExecutor(Executor executor) {
102111
return this;
103112
}
104113

114+
@Override
115+
public HttpClientContext.Builder withProxy(ProxySelector proxySelector) {
116+
this.proxy = proxySelector;
117+
return this;
118+
}
119+
120+
@Override
121+
public HttpClientContext.Builder withSSLContext(SSLContext sslContext) {
122+
this.sslContext = sslContext;
123+
return this;
124+
}
125+
126+
@Override
127+
public HttpClientContext.Builder withSSLParameters(SSLParameters sslParameters) {
128+
this.sslParameters = sslParameters;
129+
return this;
130+
}
131+
132+
@Override
133+
public HttpClientContext.Builder withAuthenticator(Authenticator authenticator) {
134+
this.authenticator = authenticator;
135+
return this;
136+
}
137+
138+
@Override
139+
public HttpClientContext.Builder withPriority(int priority) {
140+
this.priority = priority;
141+
return this;
142+
}
143+
105144
@Override
106145
public HttpClientContext build() {
107146
requireNonNull(baseUrl, "baseUrl is not specified");
@@ -133,8 +172,7 @@ private RequestIntercept buildIntercept() {
133172
}
134173

135174
private HttpClient defaultClient() {
136-
final HttpClient.Builder builder =
137-
HttpClient.newBuilder()
175+
final HttpClient.Builder builder = HttpClient.newBuilder()
138176
.followRedirects(redirect)
139177
.connectTimeout(Duration.ofSeconds(20));
140178
if (cookieHandler != null) {
@@ -146,6 +184,21 @@ private HttpClient defaultClient() {
146184
if (executor != null) {
147185
builder.executor(executor);
148186
}
187+
if (proxy != null) {
188+
builder.proxy(proxy);
189+
}
190+
if (sslContext != null) {
191+
builder.sslContext(sslContext);
192+
}
193+
if (sslParameters != null) {
194+
builder.sslParameters(sslParameters);
195+
}
196+
if (authenticator != null) {
197+
builder.authenticator(authenticator);
198+
}
199+
if (priority > 0) {
200+
builder.priority(priority);
201+
}
149202
return builder.build();
150203
}
151204

http-client/client/src/main/java/io/avaje/http/client/HttpClientContext.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package io.avaje.http.client;
22

3+
import javax.net.ssl.SSLContext;
4+
import javax.net.ssl.SSLParameters;
5+
import java.net.Authenticator;
36
import java.net.CookieHandler;
7+
import java.net.ProxySelector;
48
import java.net.http.HttpClient;
59
import java.net.http.HttpResponse;
610
import java.time.Duration;
@@ -223,6 +227,41 @@ interface Builder {
223227
*/
224228
Builder withExecutor(Executor executor);
225229

230+
/**
231+
* Set the proxy to the underlying {@link HttpClient}.
232+
*
233+
* @see HttpClient.Builder#proxy(ProxySelector)
234+
*/
235+
Builder withProxy(ProxySelector proxySelector);
236+
237+
/**
238+
* Set the sslContext to the underlying {@link HttpClient}.
239+
*
240+
* @see HttpClient.Builder#sslContext(SSLContext)
241+
*/
242+
Builder withSSLContext(SSLContext sslContext);
243+
244+
/**
245+
* Set the sslParameters to the underlying {@link HttpClient}.
246+
*
247+
* @see HttpClient.Builder#sslParameters(SSLParameters)
248+
*/
249+
Builder withSSLParameters(SSLParameters sslParameters);
250+
251+
/**
252+
* Set a HttpClient authenticator to the underlying {@link HttpClient}.
253+
*
254+
* @see HttpClient.Builder#authenticator(Authenticator)
255+
*/
256+
Builder withAuthenticator(Authenticator authenticator);
257+
258+
/**
259+
* Set the priority for HTTP/2 requests to the underlying {@link HttpClient}.
260+
*
261+
* @see HttpClient.Builder#priority(int)
262+
*/
263+
Builder withPriority(int priority);
264+
226265
/**
227266
* Build and return the context.
228267
*

0 commit comments

Comments
 (0)