【发布时间】: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