Skip to content

Commit 3c87e6b

Browse files
authored
[dotnet] Possibility to override underlying HttpClient/HttpClientHandler for all HTTP requests (#15283)
1 parent 6836d0a commit 3c87e6b

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

dotnet/src/webdriver/Remote/HttpCommandExecutor.cs

+27-4
Original file line numberDiff line numberDiff line change
@@ -221,19 +221,39 @@ protected virtual void OnSendingRemoteHttpRequest(SendingRemoteHttpRequestEventA
221221
this.SendingRemoteHttpRequest?.Invoke(this, eventArgs);
222222
}
223223

224-
private HttpClient CreateHttpClient()
224+
/// <summary>
225+
/// Creates an instance of <see cref="HttpClientHandler"/> as underlying handler,
226+
/// used by <see cref="CreateHttpClient"/>. Invoked only once when required.
227+
/// </summary>
228+
/// <returns>An instance of <see cref="HttpClientHandler"/>.</returns>
229+
protected virtual HttpClientHandler CreateHttpClientHandler()
225230
{
226-
HttpClientHandler httpClientHandler = new HttpClientHandler();
231+
HttpClientHandler httpClientHandler = new();
232+
227233
string userInfo = this.remoteServerUri.UserInfo;
228-
if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(":"))
234+
235+
if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(':'))
229236
{
230-
string[] userInfoComponents = this.remoteServerUri.UserInfo.Split(new char[] { ':' }, 2);
237+
string[] userInfoComponents = this.remoteServerUri.UserInfo.Split([':'], 2);
231238
httpClientHandler.Credentials = new NetworkCredential(userInfoComponents[0], userInfoComponents[1]);
232239
httpClientHandler.PreAuthenticate = true;
233240
}
234241

235242
httpClientHandler.Proxy = this.Proxy;
236243

244+
return httpClientHandler;
245+
}
246+
247+
/// <summary>
248+
/// Creates an instance of <see cref="HttpClient"/> used by making all HTTP calls to remote end.
249+
/// Invoked only once when required.
250+
/// </summary>
251+
/// <returns>An instance of <see cref="HttpClient"/>.</returns>
252+
protected virtual HttpClient CreateHttpClient()
253+
{
254+
var httpClientHandler = CreateHttpClientHandler()
255+
?? throw new InvalidOperationException($"{nameof(CreateHttpClientHandler)} method returned null");
256+
237257
HttpMessageHandler handler = httpClientHandler;
238258

239259
if (_logger.IsEnabled(LogEventLevel.Trace))
@@ -242,15 +262,18 @@ private HttpClient CreateHttpClient()
242262
}
243263

244264
var client = new HttpClient(handler);
265+
245266
client.DefaultRequestHeaders.UserAgent.ParseAdd(this.UserAgent);
246267
client.DefaultRequestHeaders.Accept.ParseAdd(RequestAcceptHeader);
247268
client.DefaultRequestHeaders.ExpectContinue = false;
269+
248270
if (!this.IsKeepAliveEnabled)
249271
{
250272
client.DefaultRequestHeaders.Connection.ParseAdd("close");
251273
}
252274

253275
client.Timeout = this.serverResponseTimeout;
276+
254277
return client;
255278
}
256279

0 commit comments

Comments
 (0)