Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java apache commons 3.1中的httpClient代理支持_Java_Apache_Proxy_Apache Commons - Fatal编程技术网

Java apache commons 3.1中的httpClient代理支持

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传递代理参

我正在使用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;
    }
}