Skip to content

Commit 78e760d

Browse files
authored
Don't discard the system proxy setting (Azure#16995)
Fixes Azure#16990
1 parent bd3b81f commit 78e760d

File tree

3 files changed

+49
-3
lines changed

3 files changed

+49
-3
lines changed

sdk/core/Azure.Core/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
### Added
66
- `System.Text.Json.JsonConverter` implementation for the `ETag`
77

8+
### Fixes
9+
- System proxy settings are correctly applied on .NET Framework
10+
811
## 1.6.0 (2020-10-28)
912

1013
### Added

sdk/core/Azure.Core/src/Pipeline/HttpWebRequestTransport.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ namespace Azure.Core.Pipeline
2020
internal class HttpWebRequestTransport : HttpPipelineTransport
2121
{
2222
public static readonly HttpWebRequestTransport Shared = new HttpWebRequestTransport();
23-
private readonly IWebProxy? _proxy;
23+
private readonly IWebProxy? _environmentProxy;
2424

2525
/// <summary>
2626
/// Creates a new instance of <see cref="HttpWebRequestTransport"/>
@@ -29,7 +29,7 @@ public HttpWebRequestTransport()
2929
{
3030
if (HttpEnvironmentProxy.TryCreate(out IWebProxy webProxy))
3131
{
32-
_proxy = webProxy;
32+
_environmentProxy = webProxy;
3333
}
3434
}
3535

@@ -105,7 +105,11 @@ private HttpWebRequest CreateRequest(Request messageRequest)
105105
{
106106
var request = WebRequest.CreateHttp(messageRequest.Uri.ToUri());
107107
request.Method = messageRequest.Method.Method;
108-
request.Proxy = _proxy;
108+
// Don't disable the default proxy when there is no environment proxy configured
109+
if (_environmentProxy != null)
110+
{
111+
request.Proxy = _environmentProxy;
112+
}
109113

110114
foreach (var messageRequestHeader in messageRequest.Headers)
111115
{

sdk/core/Azure.Core/tests/TransportFunctionalTests.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Collections.Generic;
77
using System.IO;
88
using System.Linq;
9+
using System.Net;
910
using System.Text;
1011
using System.Threading;
1112
using System.Threading.Tasks;
@@ -698,6 +699,44 @@ public async Task ProxySettingsAreReadFromEnvironment(string envVar, string url)
698699
}
699700
}
700701

702+
#if NET461 // GlobalProxySelection.Select not supported on netcoreapp
703+
[NonParallelizable]
704+
[Test]
705+
public async Task DefaultProxySettingsArePreserved()
706+
{
707+
#pragma warning disable 618 // Use of obsolete symbol
708+
var oldGlobalProxySelection = GlobalProxySelection.Select;
709+
#pragma warning restore 618
710+
try
711+
{
712+
using (TestServer testServer = new TestServer(async context =>
713+
{
714+
context.Response.Headers["Via"] = "Test-Proxy";
715+
byte[] buffer = Encoding.UTF8.GetBytes("Hello");
716+
await context.Response.Body.WriteAsync(buffer, 0, buffer.Length);
717+
}))
718+
{
719+
#pragma warning disable 618 // Use of obsolete symbol
720+
GlobalProxySelection.Select = new WebProxy(testServer.Address.ToString());
721+
#pragma warning restore 618
722+
723+
var transport = GetTransport();
724+
Request request = transport.CreateRequest();
725+
request.Uri.Reset(new Uri("http://microsoft.com"));
726+
Response response = await ExecuteRequest(request, transport);
727+
Assert.True(response.Headers.TryGetValue("Via", out var via));
728+
Assert.AreEqual("Test-Proxy", via);
729+
}
730+
}
731+
finally
732+
{
733+
#pragma warning disable 618 // Use of obsolete symbol
734+
GlobalProxySelection.Select = oldGlobalProxySelection;
735+
#pragma warning restore 618
736+
}
737+
}
738+
#endif
739+
701740
[Test]
702741
public async Task ResponseHeadersAreSplit()
703742
{

0 commit comments

Comments
 (0)