突破自身IP限制,对外隐藏自身IP地址 。突破IP限制包括访问国外受限站点,访问国内特定单位、团体的内部资源 。
提高访问速度 , 代理服务器提供的缓冲功能可以避免每个用户都直接访问远程主机,从而提高客户端访问速度 。
17.5.1 直接使用Proxy创建连接
Proxy有如下一个构造器:Proxy(Proxy.Type type, SocketAddress sa):创建表示代理服务器的Proxy对象 。而sa参数指定代理服务器的地址,其中type是该代理服务器的类型,该服务器类型有如下三种:
(1)Proxy.Type.DIRECT:表示直接连接或缺少代理 。
(2)Proxy.Type.HTTP:表示高级协议的代理,如 HTTP 或 FTP 。
(3)Proxy.Type.SOCKS:表示 SOCKS(V4 或 V5)代理 。
一旦创建了Proxy对象之后,程序就可以在使用URLConnection打开连接时,或创建Socket连接时传入一个Proxy对象 , 作为本次连接所使用的代理服务器 。
其中URL包含了一个URLConnection openConnection(Proxy proxy)方法,该方法使用指定的代理服务器来打开连接;而Socket则提供了一个Socket(Proxy proxy)构造器,该构造器使用指定的代理服务器创建一个没有连接的Socket对象 。
下面以URLConnection为例来介绍如何在URLConnection中使用代理服务器 。
程序清单:codes/17/17-5/ProxyTest.java
上面代码第一行粗体字代码创建了一个Proxy对象,第二行粗体字代码就是用Proxy对象来打开URLConnection连接 。除此之外,该程序的其他地方就是对URLConnection的使用了 。由此可见 , JDK1.5提供了对代理服务器很好的支持 。
17.5.2 使用ProxySelector选择代理服务器
前面介绍的直接使用Proxy对象可以在打开URLConnection或Socket时指定代理服务器,使用这种方式需要每次打开连接都显式设置代理服务器 。如果想让系统打开连接时总是具有默认的代理服务器,则可以使用java.net.ProxySelector,它可以它根据不同的连接使用不同的代理服务器 。
系统默认的ProxySelector会检测各种系统属性和URL协议,然后决定怎样连接不同的主机 。当然,程序也可以调用ProxySelector类的setDefaultI()静态方法来设置默认代理服务器,也可以调用getDefault()方法获得系统当前默认的代理服务器 。
程序可以通过System类来设置系统的代理服务器属性,关于代理服务器常用的属性名有如下三个:
http.proxyHost:设置HTTP访问所使用的代理服务器地址 。该属性名的前缀可以改为https、ftp等 , 分别用于设置HTTP访问、安全HTTP访问和FTP访问所用的代理服务器地址 。
http.proxyPort:设置HTTP访问所使用的代理服务器端口 。该属性名的前缀可以改为https、ftp等 , 分别用于设置HTTP访问、安全HTTP访问和FTP访问所用的代理服务器端口 。
http.nonProxyHosts:设置HTTP访问中不需要使用代理服务器的远程主机 , 可以使用*通配符,如果有多个地址 , 多个地址用竖线(|)分隔 。
下面程序示范了通过改变系统属性来改变默认的代理服务器 。
程序清单:codes/17/17-5/ ProxySelectorTest.java
上面程序中三行粗体字代码设置Java打开HTTP访问时的代理服务器属性,其中前两行代码设置代理服务器的地址和端口,第三行代码设置该代理HTTP访问哪些主机时不需要使用代理服务器 。上面程序的①行代码处直接打开一个URLConnection,但系统会为打开该URLConnection时使用代理服务器 。
运行上面程序,将会看到程序长时间等待,因为192.168.0.96通常并不是有效的代理服务器(当然,如果读者运行的机器恰好可以使用地址为192.168.0.96的代理服务器又另当别论) 。
- 如何获取云服务器的源代码? 云服务器源代码怎么弄
- 如何设置云服务器的源代码? 云服务器源代码怎么设置
- java查询数组中是否包含某一个值 javamongodb数组查询
- 如何修改云服务器的源代码? 云服务器源码怎么修改
- 如何寻找云服务器的源代码? 云服务器源码怎么找
- 如何配置云服务器的源代码? 云服务器源码怎么设置
- redis实战电子书 redisjava书籍
- redis哨兵keepalive 代码redis哨兵
- javaredis集群 javaredis列队
- Redis队列排队 redis队列java
