Apaches HttpComponentのhttpclientを使用しているときに、構成されたプロパティからプロキシ認証用のユーザーとパスワードを構成しようとしましたが、成功しませんでした。HttpState
私が見つけたすべての例は、やなど、使用できなくなったメソッドやクラスを参照していますsetProxyCredentials
。
それで、誰かが私にプロキシクレデンシャルを設定する方法の例を教えてもらえますか?
Apaches HttpComponentのhttpclientを使用しているときに、構成されたプロパティからプロキシ認証用のユーザーとパスワードを構成しようとしましたが、成功しませんでした。HttpState
私が見つけたすべての例は、やなど、使用できなくなったメソッドやクラスを参照していますsetProxyCredentials
。
それで、誰かが私にプロキシクレデンシャルを設定する方法の例を教えてもらえますか?
4.3の答えを探している人のために...かなり新しく、その例では新しいHttpClientBuilderを使用していませんでした...そのバージョンでこれを実装した方法は次のとおりです。
NTCredentials ntCreds = new NTCredentials(ntUsername, ntPassword,localMachineName, domainName );
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials( new AuthScope(proxyHost,proxyPort), ntCreds );
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.useSystemProperties();
clientBuilder.setProxy(new HttpHost(pxInfo.getProxyURL(), pxInfo.getProxyPort()));
clientBuilder.setDefaultCredentialsProvider(credsProvider);
clientBuilder.setProxyAuthenticationStrategy(new ProxyAuthenticationStrategy());
CloseableHttpClient client = clientBuilder.build();
Basic-Auth の場合、次のようになります。
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(
new AuthScope("PROXY HOST", 8080),
new UsernamePasswordCredentials("username", "password"));
HttpHost targetHost = new HttpHost("TARGET HOST", 443, "https");
HttpHost proxy = new HttpHost("PROXY HOST", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
AFAIK NTLM はそのままではサポートされていません。NTCredentials
しかし、それを使用して、おそらくオーバーロードすることで管理できる場合がありますDefaultProxyAuthenticationHandler
。
次のように、NTLM の代わりに、4.3 以降の httpClient で単純な古いユーザー名とパスワードを使用できます。
HttpHost proxy = new HttpHost("x.x.com",8080);
Credentials credentials = new UsernamePasswordCredentials("username","password");
AuthScope authScope = new AuthScope("x.x.com", 8080);
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(authScope, credentials);
HttpClient client = HttpClientBuilder.create().setProxy(proxy).setDefaultCredentialsProvider(credsProvider).build();
HttpResponse response=client.execute(new HttpGet("http://stackoverflow.com/questions/6962047/apache-httpclient-4-1-proxy-authentication"));
NTLMでは、より簡単なことがうまくいきました。
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(proxy_host, proxy_port),
new NTCredentials(this.proxy_user, this.proxy_pass, this.proxy_host, this.proxy_domain));
HttpHost proxy = new HttpHost(this.proxy_host, this.proxy_port, "http");
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
HttpClient 4.5 および要求ごとの認証の場合:
HttpContext httpContext = new BasicHttpContext();
AuthState authState = new AuthState();
authState.update(new BasicScheme(), new UsernamePasswordCredentials("userName", "password"));
httpContext.setAttribute(HttpClientContext.PROXY_AUTH_STATE, authState);
CloseableHttpResponse httpResponse = httpClient.execute(httpRequest, httpContext);