HttpClient的代理身份验证问题

时间:2011-04-19 14:09:54

标签: java proxy httpclient

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

但是,通过代理访问互联网。我在胖客户端上使用HttpClient,在服务器端上载Apache Commons文件。

我在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); 

但是,我没有使用上面的PROXY_HOST,PROXY_PORT的硬编码值,而是使用HttpUrlConnection获取代理信息并设置为这些值。这很好用。

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

现在,当我使用HttpClient连接到服务器时,请求通过代理进行,但失败,因为它需要提供代理信息的用户身份验证凭据。我无法找到一种方法如何使这项工作正如我期望用户输入用户ID和密码一样,一旦连接到代理而不是请求完全失败。

有人可以建议如何在不对PROXY_HOST,PROXY_PORT值进行硬编码的情况下使HttpClient与代理一起工作。

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

有人可以为这种情况建议一个解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

java -Dhttp.proxyHost=myproxyserver.com -Dhttp.proxyPort=80 MyMainClass

用户和密码将通过GUI从用户询问,然后使用System.getProperties()。put(String,String)方法设置。参数是:

  • http.proxyUser
  • http.proxyPassword

完整文档可用here。您可以找到与您的确切问题相关的文章here