Skip to content

Commit

Permalink
[dotnet] Possibility to override underlying HttpClient/HttpClientHand…
Browse files Browse the repository at this point in the history
…ler for all HTTP requests (#15283)
  • Loading branch information
nvborisenko authored Feb 13, 2025
1 parent 6836d0a commit 3c87e6b
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions dotnet/src/webdriver/Remote/HttpCommandExecutor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -221,19 +221,39 @@ protected virtual void OnSendingRemoteHttpRequest(SendingRemoteHttpRequestEventA
this.SendingRemoteHttpRequest?.Invoke(this, eventArgs);
}

private HttpClient CreateHttpClient()
/// <summary>
/// Creates an instance of <see cref="HttpClientHandler"/> as underlying handler,
/// used by <see cref="CreateHttpClient"/>. Invoked only once when required.
/// </summary>
/// <returns>An instance of <see cref="HttpClientHandler"/>.</returns>
protected virtual HttpClientHandler CreateHttpClientHandler()
{
HttpClientHandler httpClientHandler = new HttpClientHandler();
HttpClientHandler httpClientHandler = new();

string userInfo = this.remoteServerUri.UserInfo;
if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(":"))

if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(':'))
{
string[] userInfoComponents = this.remoteServerUri.UserInfo.Split(new char[] { ':' }, 2);
string[] userInfoComponents = this.remoteServerUri.UserInfo.Split([':'], 2);
httpClientHandler.Credentials = new NetworkCredential(userInfoComponents[0], userInfoComponents[1]);
httpClientHandler.PreAuthenticate = true;
}

httpClientHandler.Proxy = this.Proxy;

return httpClientHandler;
}

/// <summary>
/// Creates an instance of <see cref="HttpClient"/> used by making all HTTP calls to remote end.
/// Invoked only once when required.
/// </summary>
/// <returns>An instance of <see cref="HttpClient"/>.</returns>
protected virtual HttpClient CreateHttpClient()
{
var httpClientHandler = CreateHttpClientHandler()
?? throw new InvalidOperationException($"{nameof(CreateHttpClientHandler)} method returned null");

HttpMessageHandler handler = httpClientHandler;

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

var client = new HttpClient(handler);

client.DefaultRequestHeaders.UserAgent.ParseAdd(this.UserAgent);
client.DefaultRequestHeaders.Accept.ParseAdd(RequestAcceptHeader);
client.DefaultRequestHeaders.ExpectContinue = false;

if (!this.IsKeepAliveEnabled)
{
client.DefaultRequestHeaders.Connection.ParseAdd("close");
}

client.Timeout = this.serverResponseTimeout;

return client;
}

Expand Down

0 comments on commit 3c87e6b

Please sign in to comment.