Dan*_*ral 24 java proxy proxy-authentication apache-httpclient-4.x
我一直在尝试使用Apaches HttpComponent的httpclient从配置的属性配置代理身份验证的用户和密码,但没有成功.我找到的所有示例都引用了不再可用的方法和类,例如HttpState和setProxyCredentials.
那么,有人能举例说明如何配置代理凭证吗?
Hot*_*tel 37
对于任何寻找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();
Run Code Online (Sandbox Code Playgroud)
nfe*_*ner 25
对于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);
Run Code Online (Sandbox Code Playgroud)
开箱即用不支持AFAIK NTLM.但是你可能能够使用NTCredentials并且可能超载来管理它DefaultProxyAuthenticationHandler.
Vis*_*hnu 15
可以使用4.3+ httpClient上的普通旧用户名和密码代替NTLM,如下所示:
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"));
Run Code Online (Sandbox Code Playgroud)
这个答案使用Apache的HttpClient v4.1及更高版本.
接受的答案对我不起作用,但我找到了其他的东西!
以下是来自apache的一些经过测试验证的代码,演示了如何通过代理对HTTP请求进行身份验证.
完整文档位于:https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html.
Apache也有一个很好的例子:https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientProxyAuthentication.java
my_username为您的代理用户名my_password为您的代理密码proxy.mycompany.com为您的代理主机8080为您的代理端口google.com与你想发送的HTTP请求的站点的主机来./some-path为您要将HTTP请求发送到的路径.这使用您之前指定的主机站点(google.com).以下示例将对请求进行身份验证username:password@proxy.mycompany.com:8080并发送GET请求http://www.google.com/some-path,并将打印响应HTTP代码.
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope("proxy.mycompany", 8080),
new UsernamePasswordCredentials("my_username", "my_password"));
CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider).build();
try {
//Replace "google.com" with the target host you want to send the request to
HttpHost target = new HttpHost("google.com", 80, "http");
HttpHost proxy = new HttpHost("proxy.mycompany", 8080);
RequestConfig config = RequestConfig.custom()
.setProxy(proxy)
.build();
CloseableHttpResponse response = null;
//Replace "/some-path" with the path you want to send a get request to.
HttpPost httppost = new HttpPost("/some-path");
httppost.setConfig(config);
response = httpclient.execute(target, httppost);
try {
System.out.println("Return status code is "+response.getStatusLine().getStatusCode());
} finally {
response.close();
}
} finally {
httpclient.close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56497 次 |
| 最近记录: |