【问题标题】:Proxy authentication problem with HttpClientHttpClient 的代理身份验证问题
【发布时间】:2011-08-08 17:30:52
【问题描述】:

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

但是,访问互联网是通过代理。我在胖客户端上使用 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); 

但是,我使用 HttpUrlConnection 来获取代理信息并设置到这些值中,而不是对上面的 PROXY_HOST、PROXY_PORT 值进行硬编码。这工作正常。

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

现在,当我使用 HttpClient 连接到服务器时,请求通过代理但失败,因为它需要提供的代理信息的用户身份验证凭据。我无法弄清楚如何使其工作,因为我希望一旦连接到代理而不是请求完全失败,用户就会弹出一个输入用户 ID 和密码的窗口。

有人可以建议如何使 HttpClient 与代理一起工作,而无需对 PROXY_HOST、PROXY_PORT 值进行硬编码。

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

有人可以为这种情况提出解决方案吗?

【问题讨论】:

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

标签: java proxy httpclient


【解决方案1】:

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

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

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

  • http.proxyUser
  • http.proxyPassword

完整的文档可在here 获得。可以找到与您的确切问题有关的文章here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多