28

Apaches HttpComponentのhttpclientを使用しているときに、構成されたプロパティからプロキシ認証用のユーザーとパスワードを構成しようとしましたが、成功しませんでした。HttpState私が見つけたすべての例は、やなど、使用できなくなったメソッドやクラスを参照していますsetProxyCredentials

それで、誰かが私にプロキシクレデンシャルを設定する方法の例を教えてもらえますか?

4

7 に答える 7

41

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();
于 2013-10-03T19:20:50.440 に答える
27

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

于 2011-08-07T10:24:55.140 に答える
18

次のように、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"));
于 2014-12-01T13:58:19.733 に答える
0

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);
于 2014-08-27T07:09:59.880 に答える
0

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);
于 2015-10-16T11:58:27.010 に答える