日期:2014-05-20  浏览次数:20667 次

Applet如何获取浏览器(不一定是IE)使用的代理和Cookie?
由于要做一个跨浏览器的Applet,经过了安全的数字签名,其中需要使用HTTP请求访问数据。起初使用java.net.URL,后来发现java.net.URL不好用,就换成了Apache的HttpClient。但是发现HttpClient并不会像java.net.URL那样自动使用浏览器设置的代理服务器和Cookie,需要自己使用代码设置代理和Cookie。
那么现在的问题是如何自己取得浏览器的当前使用的代理设置和Cookie。那么首先想到的是从注册表中取,后来发现不可行,因为注册表只有IE才会使用,非IE浏览器(比如Firefox或Netscape)的代理设置并不在注册表中,而且发现还有的客户浏览器的代理设置中设置为自动检测设置或配置为使用自动配置脚本,这样即使分别为每个浏览器设计一套读取代里配置信息的程序,却无法应付这种情况,而java.net.URL却可以很好地处理这种情况。
还有就是类似于Maxthon那样的动态设置代理的浏览器,其中的代理配置只影响Maxthon本身,并不在注册表中,更无法通过读取注册表来进行判断使用的哪个代理服务器。但是java.net.URL却可以很好地使用Maxthon设置的代理。
除了代理服务器外,HttpClient的另一个问题是无法使用浏览器的Cookie。首先我想到的是直接去硬盘上读取,可这又碰到不同浏览器的问题,我无法使用同一个程序读取不同浏览器中的Cookie。另外就是如果通过读取硬盘上的Cookie文件取得Cookie,那么临时Cookie(没有设置过期时间的Cookie,这些Cookie随着浏览器的关闭自动消失)这种不保存在硬盘上的Cookie就无法取到了,而java.net.URL处理不同浏览器之间的Cookie和临时Cookie都做得很好。
由于客户使用的浏览器不同,甚至操作系统也不同(有些是Windows,有些是Linux甚至是Solaris),所以我也不可能罗列出所有的浏览器和所有的操作系统,而分别为HttpClient设置代理和Cookie,而java.net.URL在不同浏览器和不同操作系统中的这两个方面都工作得十分好。不知道有什么办法解决这两个问题吗?

------解决方案--------------------
给你篇文章参考下:
http://blog.csdn.net/fenglibing/archive/2007/08/14/1742336.aspx
------解决方案--------------------
可以用ProxySelectorRoutePlanner获取proxy, 
参考:http://www.nabble.com/Best-way-to-deal-with-proxy-servers-from-simple-applet--td22129390.html
Java code

DefaultHttpClient httpclient = new DefaultHttpClient();

ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(
         httpclient.getConnectionManager().getSchemeRegistry(),
         ProxySelector.getDefault());

httpclient.setRoutePlanner(routePlanner);