若何编写可通过代理访谒因特网上的Web服务器的Java操纵程序[Java编程]
本文“若何编写可通过代理访谒因特网上的Web服务器的Java操纵程序[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
本本领将向您报告若何编写可通过代理拜候因特网上的Web服务器的Java利用程序.在Java利用程序中加入代理支持只需额外编写几行代码,且不依靠任何安全性“漏洞”.
几近全部的公司都非常关注保护自己的内部网络,以防黑客及入窃者.一种常见的安全办法是完好断开与因特网的衔接.假如黑客们不能衔接到您的任何一台机械,他们就不能不法进入您的系统.这种战略产生的不利副作用是,内部用户无法拜候外部的因特网服务器,如Yahoo或JavaWorld.为了办理这一问题,网络管理员普通安装“代理服务器”.实际上,代理是安装于因特网和内部网之间的一种服务,用来管理这两个范畴之间的衔接.代理有助于削减安全性的外部威胁,同时还答应内部用户拜候因特网服务.固然Java使得编写因特网客户机不再艰难,但是假如客户机不能通过代理,则它们毫无用处.幸运的是,Java使得利用代理支持不再艰难--假如您知道密诀,这就是事实.
将Java和代理结合起来的诀窍即在Java运行时激活特定的系统属性.这些属性未被写入正式文件,只是作为Java传说的一部份在Java编程人员中秘传.为了支持代理,Java利用程序不但需求指定代理本身的信息,并且需求指定用于认证的用户信息.在开始利用网际协议之前,您需求在程序中增添以下几行代码:
System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost","myProxyMachineName");
System.getProperties().put("proxyPort","85");
上面的第一行告诉Java您要通过代理举行衔接,第二行指定代理所在的机械,第三行指定代理监听的端口.有些代理在受权用户拜候因特网之前,要求用户输入用户名和口令.假如您利用位于防火墙之内的Web浏览器,您便大概碰到过这种情形.以下是履行认证的办法:
URLConnectionconnection=url.openConnection();
Stringpassword="username:password";
StringencodedPassword=base64Encode(password);
connection.setRequestProperty("Proxy-Authorization",encodedPassword);
这段代码的思惟是,您必须调整HTTP标头以发出用户信息.这是通过调用setRequestProperty()来实现的.这种办法答应您在发出恳求之前处理HTTP标头.HTTP要求用base64对用户名和口令举行编码.幸运的是,有一组公用域API,它们将代您履行编码(请参阅参考资源部份).
如您所见,在Java利用程序中加入代理支持并不需求做多少工作.有了目前的知识,再做一点研究(您必须查明您的代理是若何处理您感爱好的协议以及若何举行用户认证的),您就可以用其他协议实现代理.
FTP代理
ScottD.Taylor提出这个诀窍来处理FTP协议代理:
defaultProperties.put("ftpProxySet","true");
defaultProperties.put("ftpProxyHost","proxy-host-name");
defaultProperties.put("ftpProxyPort","85");
接下来您便可以通过以下代码利用"ftp"协议拜候文件URL:
URLurl=newURL("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt");
假若有人有利用其他网际协议代理的例子,我很想看看.
注意:代码示例(Example.java)仅在JDK1.1.4下测试过.
后续本领!
关于仍在利用JDK1.1.7(配合WebSphere3.0)的开辟人员而言,将proxyHost和proxyPort设为系统属性不起作用;conn.getInputStream()大概返回衔接超时,大概是找不到主机途径.但是,我利用承受Host和Port为参数的URL构造函数办理了这一问题(利用我的代理主机和端口):
publicURL(Stringprotocol,Stringhost,intport,Stringfile).
借助用户名和口令举行认证的办法不起作用.应将"Basic"置于认证字符串的开首;比方:
StringencodedPassword=base64Encode(password);
应当是:
StringencodedPassword="Basic"+base64Encode(password);
您也没必要用一个单独的程序来举行64位编码.您可以利用sun.misc.BASE64Encoder()类.下面是完成这两处窜改之后的代码:
System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost",proxyHost);
System.getProperties().put("proxyPort",proxyPort);
StringauthString="userid:password";
Stringauth="Basic"+newsun.misc.BASE64Encoder
().encode(authString.getBytes());
URLurl=newURL("http://java.sun.com/");
URLConnectionconn=url.openConnection();
conn.setRequestProperty("Proxy-Authorization",auth);
下面是利用socks4代理服务器的办法:
System.getProperty("socksProxySet",true);
System.getProperty("socksProxyHost",proxyHostName);
System.getProperty("socksProxyPort",proxyPort);
UsuallytheproxyPortforSocks4isport1080
接下来您便可以用Socks4举行衔接了.
以上是“若何编写可通过代理访谒因特网上的Web服务器的Java操纵程序[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |