Speckle Manager connection issues behind HTTP Proxy

We are in a corporate environment and there is no direct internet connection, only via an HTTP Proxy.
And the manager worked after the fixes at the end of 2022 (https://speckle.community/t/could-not-ping-google/4432).

But it seems a new issues has appeared.
The Manager can’t connect to the public speckle servers and it’s not using the proxy that is configured system-wide in windows, but it’s trying to make a direct connection.

I think I have narrowed down the issue.
It seems that Microsoft now automatically adds a protocol prefix to the proxy address field in the windows proxy settings.
So if you enter “proxy.example.internal” and then click on save, close the settings and open them again, then windows will automatically add “http://” as a prefix and it will show “http://proxy.example.internal” in the field.

If I enter “proxy.example.internal” (removing the protocol) again and click save and then run the speckle manager then it is able to connect via the proxy and can connect to the official speckle servers.
So this is a temporary workaround.
But if I open the windows proxy settings again and don’t change anything and click save again, it will add the prefix again automatically and then the speckle manager times out and says it can’t connect.
So I think Microsoft changed the Windows behaviour and is now expecting to have a protocol prefix for proxy addresses.

But it looks like the speckle manager can’t handle a proxy address that has a protocol prefix like “http://” and tries to connect directly instead.

Autodesk had the same issue in some of their software (they parsed only the “http” as the proxy hostname and then tried to do a DNS lookup for that name, which of course doesn’t exist).
But as far as I know it has been fixed in all of their software that I have tried so far.

Here is what I think are the relevant logs. The ping (ICMP) to 1.1.1.1 fails (because no direct internet traffic is allowed in this network) but then the “HTTPPinging” also fails because it’s using a direct connection too instead of the proxy that is configured in windows.
(Windows 10 22H2, Speckle Manager v2.12.2)

2024-01-10 08:34:00.966 +01:00 [INF] Pinging 1.1.1.1
2024-01-10 08:34:01.691 +01:00 [WRN] Failed to ping The ping operation failed with status TimedOut cause: {exceptionMessage}
System.Exception: The ping operation failed with status TimedOut
   at Speckle.Core.Helpers.Http.<>c__DisplayClass5_0.<<Ping>b__1>d.MoveNext()
--- End of stack trace from previous location ---
   at Polly.Retry.AsyncRetryEngine.ImplementationAsync[TResult](Func`3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates`1 shouldRetryResultPredicates, Func`5 onRetryAsync, Int32 permittedRetryCount, IEnumerable`1 sleepDurationsEnumerable, Func`4 sleepDurationProvider, Boolean continueOnCapturedContext)
   at Polly.AsyncPolicy.ExecuteAsync[TResult](Func`3 action, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext)
   at Polly.AsyncPolicy.ExecuteAndCaptureAsync[TResult](Func`3 action, Context context, CancellationToken cancellationToken, Boolean continueOnCapturedContext)
2024-01-10 08:34:01.718 +01:00 [INF] HttpPinging https://app.speckle.systems
2024-01-10 08:34:01.719 +01:00 [DBG] Starting execution of http request to "https://app.speckle.systems/"
.....
2024-01-10 08:35:41.737 +01:00 [WRN] Exception while pinging: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.
System.Threading.Tasks.TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.
 ---> System.TimeoutException: The operation was canceled.
 ---> System.OperationCanceledException: The operation was canceled.
   at System.Threading.CancellationToken.ThrowOperationCanceledException()
   at Speckle.Core.Helpers.SpeckleHttpClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
   at System.Net.Http.HttpClient.HandleFailure(Exception e, Boolean telemetryStarted, HttpResponseMessage response, CancellationTokenSource cts, CancellationToken cancellationToken, CancellationTokenSource pendingRequestsCts)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at Speckle.Core.Helpers.Http.HttpPing(String address)
1 Like