Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
4.5.6
-
None
Description
Repro:
- Set up an authenticating HTTP proxy (I used Squid)
- Specify the https.proxyHost, https.proxyPort, https.proxyUser and https.proxyPassword system properties
- Specify useSystemProperties when creating the client
- Make a call (to an HTTPS target)
Result:
The call fails with a 407.
Expected:
That the client would be able to authenticate towards the proxy.
Example code:
System.setProperty("https.proxyHost" , "localhost"); System.setProperty("https.proxyPort" , "3128"); System.setProperty("https.proxyUser", "squid"); System.setProperty("https.proxyPassword", "squid"); CloseableHttpClient httpclient = HttpClients.custom().useSystemProperties().build(); HttpGet httpGet = new HttpGet("https://www.google.com"); CloseableHttpResponse res = httpclient.execute(httpGet); System.out.println(res.getStatusLine());
Technical:
The reason that it doesn't work is that the AuthScope given to SystemDefaultCredentialsProvider uses "http" as scope (the SystemDefaultRoutePlanner always selects "http") but SystemDefaultCredentialsProvider uses this protocol as part of the name of the system properties from which to retrieve credentials and therefore looks for http.proxyHost, http.proxyPort, http.proxyUser and http.proxyPassword.
(a workaround is thus to specify all eight parameters, with both the http. and https. prefixes but that doesn't seem like a good solution)
I'll make a pull request with a suggested fix.
Attachments
Issue Links
- links to