Skip to content

Commit abfbc4d

Browse files
committed
[java] Honoring proxy in ClientConfig
Fixes #10531
1 parent 2f7e801 commit abfbc4d

4 files changed

Lines changed: 32 additions & 58 deletions

File tree

java/src/org/openqa/selenium/remote/http/netty/NettyClient.java

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,7 @@
2222
import org.asynchttpclient.AsyncHttpClient;
2323
import org.asynchttpclient.DefaultAsyncHttpClientConfig;
2424
import org.asynchttpclient.Dsl;
25-
import org.asynchttpclient.Realm;
2625
import org.asynchttpclient.config.AsyncHttpClientConfigDefaults;
27-
import org.asynchttpclient.proxy.ProxyServer;
28-
import org.openqa.selenium.Credentials;
29-
import org.openqa.selenium.UsernameAndPassword;
3026
import org.openqa.selenium.internal.Require;
3127
import org.openqa.selenium.remote.http.ClientConfig;
3228
import org.openqa.selenium.remote.http.Filter;
@@ -41,7 +37,6 @@
4137
import io.netty.util.Timer;
4238
import io.netty.util.concurrent.DefaultThreadFactory;
4339

44-
import java.net.InetSocketAddress;
4540
import java.util.concurrent.ThreadFactory;
4641
import java.util.concurrent.TimeUnit;
4742
import java.util.function.BiFunction;
@@ -90,31 +85,9 @@ private static AsyncHttpClient createHttpClient(ClientConfig config) {
9085
.setRequestTimeout(toClampedInt(config.readTimeout().toMillis()))
9186
.setConnectTimeout(toClampedInt(config.connectionTimeout().toMillis()))
9287
.setReadTimeout(toClampedInt(config.readTimeout().toMillis()))
93-
.setFollowRedirect(true);
94-
95-
Realm.Builder realmBuilder = null;
96-
if (config.credentials() != null) {
97-
Credentials credentials = config.credentials();
98-
if (!(credentials instanceof UsernameAndPassword)) {
99-
throw new IllegalArgumentException("Credentials must be a username and password");
100-
}
101-
UsernameAndPassword uap = (UsernameAndPassword) credentials;
102-
realmBuilder = new Realm.Builder(uap.username(), uap.password());
103-
builder.setRealm(realmBuilder.setUsePreemptiveAuth(true));
104-
}
105-
106-
if (config.proxy() != null) {
107-
InetSocketAddress address = (InetSocketAddress) config.proxy().address();
108-
ProxyServer.Builder proxyBuilder = new ProxyServer.Builder(
109-
address.getHostName(), address.getPort());
110-
if (realmBuilder != null) {
111-
proxyBuilder.setRealm(realmBuilder);
112-
}
113-
builder.setProxyServer(proxyBuilder);
114-
} else {
115-
builder.setUseProxyProperties(true)
88+
.setFollowRedirect(true)
89+
.setUseProxyProperties(true)
11690
.setUseProxySelector(true);
117-
}
11891

11992
return Dsl.asyncHttpClient(builder);
12093
}

java/src/org/openqa/selenium/remote/http/netty/NettyHttpHandler.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
package org.openqa.selenium.remote.http.netty;
1919

20-
import static org.openqa.selenium.remote.http.netty.NettyClient.toClampedInt;
21-
2220
import org.asynchttpclient.AsyncHttpClient;
2321
import org.asynchttpclient.Response;
2422
import org.openqa.selenium.internal.Require;
@@ -55,12 +53,7 @@ private HttpResponse makeCall(HttpRequest request) {
5553
Require.nonNull("Request", request);
5654

5755
Future<Response> whenResponse = client.executeRequest(
58-
NettyMessages.toNettyRequest(
59-
getConfig().baseUri(),
60-
toClampedInt(getConfig().readTimeout().toMillis()),
61-
toClampedInt(getConfig().readTimeout().toMillis()),
62-
getConfig().credentials(),
63-
request));
56+
NettyMessages.toNettyRequest(getConfig(), request));
6457

6558
try {
6659
Response response = whenResponse.get(getConfig().readTimeout().toMillis(), TimeUnit.MILLISECONDS);

java/src/org/openqa/selenium/remote/http/netty/NettyMessages.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,40 +20,45 @@
2020
import com.google.common.base.Strings;
2121

2222
import org.asynchttpclient.Dsl;
23+
import org.asynchttpclient.Realm;
2324
import org.asynchttpclient.Request;
2425
import org.asynchttpclient.RequestBuilder;
2526
import org.asynchttpclient.Response;
27+
import org.asynchttpclient.proxy.ProxyServer;
2628
import org.openqa.selenium.Credentials;
2729
import org.openqa.selenium.UsernameAndPassword;
2830
import org.openqa.selenium.remote.http.AddSeleniumUserAgent;
31+
import org.openqa.selenium.remote.http.ClientConfig;
2932
import org.openqa.selenium.remote.http.HttpMethod;
3033
import org.openqa.selenium.remote.http.HttpRequest;
3134
import org.openqa.selenium.remote.http.HttpResponse;
3235

36+
import java.net.InetSocketAddress;
3337
import java.net.URI;
3438

3539
import static org.asynchttpclient.Dsl.request;
3640
import static org.openqa.selenium.remote.http.Contents.empty;
3741
import static org.openqa.selenium.remote.http.Contents.memoize;
42+
import static org.openqa.selenium.remote.http.netty.NettyClient.toClampedInt;
3843

3944
class NettyMessages {
4045

4146
private NettyMessages() {
4247
// Utility classes.
4348
}
4449

45-
protected static Request toNettyRequest(
46-
URI baseUrl,
47-
int readTimeout,
48-
int requestTimeout,
49-
Credentials credentials,
50-
HttpRequest request) {
50+
protected static Request toNettyRequest(ClientConfig config,
51+
HttpRequest request) {
52+
53+
URI baseUrl = config.baseUri();
54+
int timeout = toClampedInt(config.readTimeout().toMillis());
55+
Credentials credentials = config.credentials();
5156

5257
String rawUrl = getRawUrl(baseUrl, request.getUri());
5358

5459
RequestBuilder builder = request(request.getMethod().toString(), rawUrl)
55-
.setReadTimeout(readTimeout)
56-
.setRequestTimeout(requestTimeout);
60+
.setReadTimeout(timeout)
61+
.setRequestTimeout(timeout);
5762

5863
for (String name : request.getQueryParameterNames()) {
5964
for (String value : request.getQueryParameters(name)) {
@@ -75,19 +80,31 @@ protected static Request toNettyRequest(
7580
builder.addHeader("User-Agent", AddSeleniumUserAgent.USER_AGENT);
7681
}
7782

83+
Realm.Builder realmBuilder = null;
7884
String info = baseUrl.getUserInfo();
7985
if (!Strings.isNullOrEmpty(info)) {
8086
String[] parts = info.split(":", 2);
8187
String user = parts[0];
8288
String pass = parts.length > 1 ? parts[1] : null;
83-
84-
builder.setRealm(Dsl.basicAuthRealm(user, pass).setUsePreemptiveAuth(true));
89+
realmBuilder = Dsl.basicAuthRealm(user, pass).setUsePreemptiveAuth(true);
90+
builder.setRealm(realmBuilder);
8591
} else if (credentials != null) {
8692
if (!(credentials instanceof UsernameAndPassword)) {
8793
throw new IllegalArgumentException("Credentials must be a user name and password");
8894
}
8995
UsernameAndPassword uap = (UsernameAndPassword) credentials;
90-
builder.setRealm(Dsl.basicAuthRealm(uap.username(), uap.password()).setUsePreemptiveAuth(true));
96+
realmBuilder = Dsl.basicAuthRealm(uap.username(), uap.password()).setUsePreemptiveAuth(true);
97+
builder.setRealm(realmBuilder);
98+
}
99+
100+
if (config.proxy() != null) {
101+
InetSocketAddress address = (InetSocketAddress) config.proxy().address();
102+
ProxyServer.Builder proxyBuilder = new ProxyServer.Builder(
103+
address.getHostName(), address.getPort());
104+
if (realmBuilder != null) {
105+
proxyBuilder.setRealm(realmBuilder);
106+
}
107+
builder.setProxyServer(proxyBuilder);
91108
}
92109

93110
if (request.getMethod().equals(HttpMethod.POST)) {

java/src/org/openqa/selenium/remote/http/netty/NettyWebSocket.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
package org.openqa.selenium.remote.http.netty;
1919

20-
import static org.openqa.selenium.remote.http.netty.NettyClient.toClampedInt;
21-
2220
import org.asynchttpclient.AsyncHttpClient;
2321
import org.asynchttpclient.ListenableFuture;
2422
import org.asynchttpclient.Request;
@@ -126,14 +124,7 @@ static BiFunction<HttpRequest, Listener, WebSocket> create(ClientConfig config,
126124

127125
return (req, listener) -> {
128126
HttpRequest filtered = filterRequest.apply(req);
129-
130-
Request nettyReq = NettyMessages.toNettyRequest(
131-
config.baseUri(),
132-
toClampedInt(config.readTimeout().toMillis()),
133-
toClampedInt(config.readTimeout().toMillis()),
134-
config.credentials(),
135-
filtered);
136-
127+
Request nettyReq = NettyMessages.toNettyRequest(config, filtered);
137128
return new NettyWebSocket(client, nettyReq, listener);
138129
};
139130
}

0 commit comments

Comments
 (0)