Java apache commons 3.1中的httpClient代理支持
我正在使用ApacheCommons3.1实现支持代理的httpClient。 我正在尝试通过代理连接到远程主机。配置代理服务器时未进行任何身份验证,但远程主机配置了身份验证。 当我通过属性文件传递代理参数时,它会在执行时发出警告: 警告-基本@xx.xx.xx.xx所需的代理凭据不可用 警告-已请求抢占式身份验证,但没有可用的默认代理凭据 但执行仍在继续 另一方面,当我通过JVM参数传递代理参数时,会再次发出相同的警告并停止执行 这种行为有什么具体原因吗?通过属性文件和JVM arg传递代理参数有什么区别吗 代码如下:Java apache commons 3.1中的httpClient代理支持,java,apache,proxy,apache-commons,Java,Apache,Proxy,Apache Commons,我正在使用ApacheCommons3.1实现支持代理的httpClient。 我正在尝试通过代理连接到远程主机。配置代理服务器时未进行任何身份验证,但远程主机配置了身份验证。 当我通过属性文件传递代理参数时,它会在执行时发出警告: 警告-基本@xx.xx.xx.xx所需的代理凭据不可用 警告-已请求抢占式身份验证,但没有可用的默认代理凭据 但执行仍在继续 另一方面,当我通过JVM参数传递代理参数时,会再次发出相同的警告并停止执行 这种行为有什么具体原因吗?通过属性文件和JVM arg传递代理参
if(System.getProperty("http.proxyHost") != null && System.getProperty("http.proxyPort") != null) {
httpClient.getHostConfiguration().setProxy(System.getProperty("http.proxyHost"), Integer.parseInt(System.getProperty("http.proxyPort")));
}
else if(AMXAdminTask.props.getProperty("http.proxyHost") != null && AMXAdminTask.props.getProperty("http.proxyPort") != null) {
httpClient.getHostConfiguration().setProxy(Propfile.props.getProperty("http.proxyHost"), Integer.parseInt(Propfile.props.getProperty("http.proxyPort")));
}
看起来你正试图将两种截然不同的东西结合起来。上面发布的代码正确地让您通过代理,但远程主机需要基本身份验证。下面的示例使用Jersey客户端(在现有项目中用于进行RESTful调用),但是您应该知道需要做什么。如果您一直坚持使用Apache HttpComponents,请查看以下内容:
我能够用相同的代码用fiddler测试代理服务器。我可以从属性文件和JVM ags传递代理参数。我使用fiddler作为代理服务器。我在代理服务器和远程主机上都有身份验证。我正在httpClient头中设置http代理凭据。但是我在响应中得到一个错误:“传输错误407:需要代理身份验证。”在fiddler中我看到一条消息:“不存在WWW身份验证头。”您需要为代理用户和密码设置系统属性:
System.setProperty(“http.proxyUser”,authUser)代码>System.setProperty(“http.proxyPassword”,authPassword)代码>@DomenicD。这可能不是所有情况下都需要的。HttpClient允许您在代码中指定代理的凭据。
import org.apache.commons.lang.StringUtils;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
import com.sun.jersey.client.apache.ApacheHttpClient;
import com.sun.jersey.client.apache.config.ApacheHttpClientConfig;
import com.sun.jersey.client.apache.config.DefaultApacheHttpClientConfig;
public abstract class BaseProxyProvider {
protected Client getHttpClient() {
final DefaultApacheHttpClientConfig cc = new DefaultApacheHttpClientConfig();
if (StringUtils.isNotEmpty(System.getProperty("http.proxyHost"))) {
cc.getProperties()
.put(ApacheHttpClientConfig.PROPERTY_PROXY_URI,
"http://" + System.getProperty("http.proxyHost") + ":"
+ System.getProperty("http.proxyPort") + "/");
}
Client c = ApacheHttpClient.create(cc);
c.addFilter(new HTTPBasicAuthFilter(WebAppPropertyReader.getProperties().getProperty(
WebAppPropertyReader.SERVICE_USER), WebAppPropertyReader.getProperties().getProperty(
WebAppPropertyReader.SERVICE_PASSWORD)));
return c;
}
}