Java HttpClient的代理身份验证问题

Java HttpClient的代理身份验证问题,java,proxy,httpclient,Java,Proxy,Httpclient,我有一个厚客户端应用程序,它连接到互联网上的服务器,用于文件传输和上传 然而,对互联网的访问是通过代理的。我在厚客户机上使用HttpClient,在服务器端使用apachecommons文件上传 我正在HttpClient上设置代理,如下所示: HttpClient client = new HttpClient(); HostConfiguration config = client.getHostConfiguration(); config.setProxy(PROXY_HOST,

我有一个厚客户端应用程序,它连接到互联网上的服务器,用于文件传输和上传

然而,对互联网的访问是通过代理的。我在厚客户机上使用HttpClient,在服务器端使用apachecommons文件上传

我正在HttpClient上设置代理,如下所示:

HttpClient client = new  HttpClient(); 
HostConfiguration config = client.getHostConfiguration(); 
config.setProxy(PROXY_HOST, PROXY_PORT); 

PostMethod filePost = new PostMethod(servletPath); 
int status = client.executeMethod(config , filePost); 
但是,我使用HttpUrlConnection获取代理信息并设置为这些值,而不是对上面的PROXY_主机、PROXY_端口的值进行硬编码。这个很好用

如果我不这样设置代理设置,HttpClient将忽略我的代理设置,并且不会自动检测它们,因此我的应用程序无法连接到internet上的服务器

现在,当我使用HttpClient连接到服务器时,请求通过代理进行,但失败了,因为它需要提供代理信息的用户身份验证凭据。我无法找到一种方法来实现这一点,因为我希望在连接到代理后,用户可以弹出一个窗口来输入用户id和密码,而不是请求完全失败

有人能建议如何让HttpClient在不硬编码proxy\u主机、proxy\u端口值的情况下使用proxy吗

此外,该应用程序将从不同用户的胖客户端启动。因此,应该从浏览器设置中自动检测代理信息(这就是HttpUrlConnection为我所做的)


有人能为这种情况提出解决方案吗

对于代理和端口,我建议在java命令行上使用System属性,如下所示:

java -Dhttp.proxyHost=myproxyserver.com -Dhttp.proxyPort=80 MyMainClass
通过GUI向用户询问用户和密码,然后使用System.getProperties().put(String,String)方法进行设置。参数包括:

  • http.proxyUser
  • http.proxyPassword

可以获得完整的文档。可以找到一篇关于您确切问题的文章。

您使用哪个版本?这个
HostConfiguration
看起来像3.1(即commons HttpClient),我在这里没有找到任何关于身份验证的信息。对于HTTP组件(例如版本4.*),上有一个示例。