apache commons中的httpClient代理支持3.1

时间:2012-11-02 16:03:53

标签: java apache proxy apache-commons

我正在使用apache commons 3.1来实现具有代理支持的httpClient。 我试图通过代理连接到远程主机。配置代理服务器时没有任何身份验证,但远程主机配置了身份验证。 当我通过属性文件传递代理参数时,它会在执行时发出警告:

警告 - BASIC @ 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")));
        }

1 个答案:

答案 0 :(得分:0)

看起来你正试图结合两种非常不同的东西。您上面发布的代码可以正确地引导您完成代理,但远程主机需要BASIC身份验证。下面的示例使用Jersey客户端(在现有项目中用于进行RESTful调用),但您应该了解需要执行的操作。如果您坚持使用Apache HttpComponents,请看一下: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html

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;
    }
}