Bug 41224

Summary: HttpClientHandler.UseProxy = false setting is ignored.
Product: [Mono] Class Libraries Reporter: Jon Goldberger [MSFT] <jon.goldberger>
Component: System.Net.HttpAssignee: Marek Safar <masafa>
Severity: normal CC: jeremy.cook, masafa, mono-bugs+mono
Priority: ---    
Version: 4.2.0 (C6)   
Target Milestone: Untriaged   
Hardware: Macintosh   
OS: Mac OS   
Tags: Is this bug a regression?: ---
Last known good build:
Attachments: Test Project

Description Jon Goldberger [MSFT] 2016-05-20 20:42:18 UTC
Created attachment 16059 [details]
Test Project

## Description

Using the following code, I wold expect the system proxy setting to be bypassed:
>var handler = new HttpClientHandler {UseProxy = false};
>_netHttpClient = new HttpClient (handler);

but the proxy is still used. The same is true using ModernHttpClient with:
>var handler = new ModernHttpClient.NativeMessageHandler(){UseProxy = false};

The only way I found to bypass the system proxy is with:
>var handler = new CFNetworkHandler () { UseSystemProxy = false };

## Steps to reproduce (need to have a proxy server configured and an iOS device set to use that proxy)

1. Open the attached test project and deploy app to your device that is set up to use a proxy.

2. Observe the console output. The response headers should indicate whether your proxy was used in the "Via: " header

Expected result: System proxy is not used.

Actual result: System proxy is used. 

## Notes

I tested this with the current Beta channel as well and got the same results.

## Environment

=== Xamarin Studio Enterprise ===

Version 5.10.3 (build 51)
Installation UUID: ceaba76c-db06-4fbd-b326-f69ea53c3e01
	Mono 4.2.4 (explicit/71b88f3)
	GTK+ 2.24.23 (Raleigh theme)

	Package version: 402040004

=== Xamarin.Profiler ===

Not Installed

=== Xamarin.Android ===

Version: (Visual Studio Enterprise)
Android SDK: /Users/jongoldberger/Library/Developer/Xamarin/android-sdk-macosx
	Supported Android versions:
		4.0.3 (API level 15)
		4.1   (API level 16)
		4.2   (API level 17)
		4.3   (API level 18)
		4.4   (API level 19)
		5.0   (API level 21)
		5.1   (API level 22)
		6.0   (API level 23)

SDK Tools Version: 25.1.3
SDK Platform Tools Version: 23.1
SDK Build Tools Version: 23.0.3

Java SDK: /usr
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

Android Designer EPL code available here:

=== Xamarin Android Player ===

Version: 0.6.5
Location: /Applications/Xamarin Android Player.app

=== Apple Developer Tools ===

Xcode 7.3.1 (10188.1)
Build 7D1014

=== Xamarin.Mac ===

Version: (Visual Studio Enterprise)

=== Xamarin.iOS ===

Version: (Visual Studio Enterprise)
Hash: d8bedd0
Branch: master
Build date: 2016-05-05 17:43:01-0400

=== Build Information ===

Release ID: 510030051
Git revision: f3c0d982165f785772d125f02668370d929014fb
Build date: 2016-03-24 18:51:31-04
Xamarin addins: ee5cfd3ecb6b20de47c1d25efb9a9abc101e8ce7
Build lane: monodevelop-lion-cycle6-c6sr3

=== Operating System ===

Mac OS X 10.11.5
Darwin Jons-MacBook-Pro.local 15.5.0 Darwin Kernel Version 15.5.0
    Tue Apr 19 18:36:36 PDT 2016
    root:xnu-3248.50.21~8/RELEASE_X86_64 x86_64
Comment 1 Marek Safar 2016-05-24 16:45:45 UTC
I am testing with http system proxy "" but I don't see any "via" header but I see there is potential issue.

Could you try to change "UseProxy = true" as much as it sounds weird and test again. It should ignore any proxy settings.
Comment 2 Marek Safar 2016-05-24 17:18:38 UTC
Fixed in master
Comment 3 Jeremy Cook 2016-05-24 22:49:59 UTC
I tested today on the Beta channel setting UseProxy = true, and low and behold, it started working on iOS/Android!   Would never have thought to try that :)
Comment 4 Jon Goldberger [MSFT] 2016-05-26 18:27:13 UTC
I confirmed the same behavior on Beta. I assume the "Fixed in Master" in comment 2 means that you will be reversing this so UseProxy = false will bypass the proxy, instead of USeProxy = true bypassing the proxy?
Comment 5 Marek Safar 2016-05-26 21:32:52 UTC
Fixed in master means that UseProxy = false will work as expected