通过代理访问因特网上的Web服务器

kangyayun167

kangyayun167

2016-02-20 01:00

今天图老师小编给大家展示的是通过代理访问因特网上的Web服务器,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

 

本技巧将向您讲述如何编写可通过代理访问因特网上的Web服务器的Java应用程序。在Java应用程序中加入代理支持只需额外编写几行代码,且不依赖任何安全性漏洞。

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

几乎所有的公司都十分关注保护自己的内部网络,以防黑客及入窃者。一种常见的安全措施是完全断开与因特网的连接。如果黑客们不能连接到您的任何一台机器,他们就不能非法进入您的系统。这种策略产生的不利副作用是,内部用户无法访问外部的因特网服务器,如Yahoo或JavaWorld。为了解决这一问题,网络管理员通常安装代理服务器。实际上,代理是安装于因特网和内部网之间的一种服务,用来管理这两个领域之间的连接。代理有助于减少安全性的外部威胁,同时还允许内部用户访问因特网服务。尽管Java使得编写因特网客户机不再困难,但是如果客户机不能通过代理,则它们毫无用处。幸运的是,Java使得使用代理支持不再困难--如果您知道密诀,这就是事实。

将Java和代理结合起来的秘诀即在Java运行时激活特定的系统属性。这些属性未被写入正式文件,只是作为Java传说的一部分在Java编程人员中秘传。为了支持代理,Java应用程序不仅需要指定代理本身的信息,而且需要指定用于认证的用户信息。在开始使用网际协议之前,您需要在程序中添加以下几行代码:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

System.getProperties().put("proxySet","true");

System.getProperties().put("proxyHost","myProxyMachineName");

System.getProperties().put("proxyPort","85");

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

上面的第一行通知Java您要通过代理进行连接,第二行指定代理所在的机器,第三行指定代理监听的端口。有些代理在授权用户访问因特网之前,要求用户输入用户名和口令。如果您使用位于防火墙之内的Web浏览器,您就可能碰到过这种情况。以下是执行认证的方法:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

URLConnectionconnection=url.openConnection();

Stringpassword="username:password";

StringencodedPassword=base64Encode(password);

connection.setRequestProperty("Proxy-Authorization",encodedPassword);

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

这段代码的思想是,您必须调整HTTP标头以发出用户信息。这是通过调用setRequestProperty()来实现的。这种方法允许您在发出请求之前处理HTTP标头。HTTP要求用base64对用户名和口令进行编码。幸运的是,有一组公用域API,它们将代您执行编码(请参阅参考资源部分)。

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

如您所见,在Java应用程序中加入代理支持并不需要做多少工作。有了现在的知识,再做一点研究(您必须查明您的代理是如何处理您感兴趣的协议以及如何进行用户认证的),您就能用其他协议实现代理。

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

FTP代理

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

ScottD.Taylor提出这个秘诀来处理FTP协议代理:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

defaultProperties.put("ftpProxySet","true");

defaultProperties.put("ftpProxyHost","proxy-host-name");

defaultProperties.put("ftpProxyPort","85");

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

接下来您便可以通过以下代码使用"ftp"协议访问文件URL:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

URLurl=newURL("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt");

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

如果有人有使用其他网际协议代理的例子,我很想看看。

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

注意:代码示例(Example.java)仅在JDK1.1.4下测试过。

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

后续技巧!

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

对于仍在使用JDK1.1.7(配合WebSphere3.0)的开发人员而言,将proxyHost和proxyPort设为系统属性不起作用;conn.getInputStream()或者返回连接超时,或者是找不到主机路径。但是,我使用接受Host和Port为参数的URL构造函数解决了这一问题(使用我的代理主机和端口):

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

publicURL(Stringprotocol,Stringhost,intport,Stringfile).

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

借助用户名和口令进行认证的方法不起作用。应将"Basic"置于认证字符串的开头;例如:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

StringencodedPassword=base64Encode(password);

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

应该是:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

StringencodedPassword="Basic"+base64Encode(password);

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

您也不必用一个单独的程序来进行64位编码。您可以使用sun.misc.BASE64Encoder()类。下面是完成这两处改动之后的代码:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)
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);

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

下面是使用socks4代理服务器的方法:

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

System.getProperty("socksProxySet",true);

System.getProperty("socksProxyHost",proxyHostName);

System.getProperty("socksProxyPort",proxyPort);

UsuallytheproxyPortforSocks4isport1080

 

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

接下来您就可以用Socks4进行连接了。

展开更多 50%)
分享

猜你喜欢

通过代理访问因特网上的Web服务器

Web开发
通过代理访问因特网上的Web服务器

使用反向代理技术保护Web服务器

电脑网络
使用反向代理技术保护Web服务器

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

解决Word2024禁用Web服务器访问的故障

word
解决Word2024禁用Web服务器访问的故障

RedHat打造代理服务器

电脑网络
RedHat打造代理服务器

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Web服务器配置方法

服务器
Web服务器配置方法

什么是快车代理服务器

电脑网络
什么是快车代理服务器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

JavaScript学习笔记:创建对象和构造类

JavaScript学习笔记:创建对象和构造类

常用的Powerpoint演示小技巧

常用的Powerpoint演示小技巧
下拉加载更多内容 ↓