




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在Java中,使用proxy是通过设置java环境变量来实现的,也就是 JVM的系统属性。我们需要设置三个属性,proxySetproxyHost和proxyPxySet是个boolean类型的,可以设置为 true或者false,true代表使用代理服务器。 proxyHost是代理服务器的IP地址proxyPort是代理服务器的端口地址。我们有两种方法设置这种系统属性,一种是命令行下运行Java程序的时候,通过参数付值一种是在java源程序中设置。第一种方法的格式如下:java-DproxySet=true-DproxyHost=myProxySe-DproxyPort=80
2、MyJavaApp第二种方法,就是直接在源程序中通过系统属性来写,如下:importjava.util.Properties;strProxy=7;strPort=8080;PropertiessystemProperties=System.getProperties;systemProperties.setProperty;systemProperties.setProperty;JDK1.3以上版本,只要设置了proxyHost和proxyPort就不用写proxySet 了。下面是一个完整的例子:strUrl=http:/blog.csd n.n et/cqq/;UR
3、Lurl=newURL;URLC onn ecti onconn=url.ope nConnection;strProxy=7;strPort=8080;PropertiessystemProperties=System.getProperties;systemProperties.setProperty;systemProperties.setProperty;BufferedReaderrd=newBufferedReader);while)!=null)rd.close;17.5.2使用ProxySelector 选择代理服务器前面介绍的直接使用 Proxy对象可以在
4、打开URLConnection或Socket时指定代理服务器,使用这种方式需要每次打开连接都显式设置代理服务器。如果想让系统打开连接时总是具有默认的代理服务器,则可以使用.ProxySelector,它可以它根据不同的连接使用不同的代理服务器。系统默认的ProxySelector 会检测各种系统属性和URL协议,然后决定怎样连接不同的主机。当然,程序也可以调用ProxySelector类的setDefaultl()静态方法来设置默认代理服务器,也可以调用getDefault()方法获得系统当前默认的代理服务器。程序可以通过System类来设置系统的代理服务器属性,关于代理服务器常用的属性名有如
5、下三个:xyHost :设置HTTP访问所使用的代理服务器地址。该属性名的前缀可以改为https、ftp等,分别用于设置HTTP访问、安全HTTP访问和FTP访问所用的代理服务器地址。xyPort :设置HTTP访问所使用的代理服务器端口。该属性名的前缀可以改为https、ftp等,分别用于设置HTTP访问、安全HTTP访问和FTP访问所用的代理服务器端口*通配符,如果有多个地址,多个http.nonProxyHosts :设置HTTP访问中不需要使用代理服务器的远程主机,可以使用地址用竖线(| )分隔。下面程序示范了通过改变系统属性来改变默认的代理服务器。程序
6、清单:codes/17/17-5/ ProxySelectorTest.javapublic class ProxySelectorTest/测试本地JVM的网络默认配置public void setLocalProxy()Properties prop = System.getProperties();/设置HTTP访问要使用的代理服务器的地址prop.setProperty(xyHost, 6);/设置HTTP访问要使用的代理服务器的端口prop.setProperty(xyPort, 8080);/设置HTTP访问不需要通过代理服务器访问
7、的主机,/可以使用*通配符,多个地址用|分隔prop.setProperty(http.nonProxyHosts, localhost|10.20.*);/设置安全HTTP访问使用的代理服务器地址与端口/它没有https.nonProxyHosts属性,它按照 http.nonProxyHosts中设置的规则访问prop.setProperty(xyHost, 6);prop.setProperty(xyPort, 443);/设置FTP访问的代理服务器的主机、端口以及不需要使用代理服务器的主机prop.setProperty(ftp
8、.proxyHost, 6);prop.setProperty(xyPort, 2121);prop.setProperty(ftp.nonProxyHosts , localhost|10.10.*);/设置socks代理服务器的地址与端口prop.setProperty(socks.ProxyHost, 6);prop.setProperty(socks.ProxyPort, 1080);/清除proxy 设置public void removeLocalProxy()Properties prop = System.getProperti
9、es();/清除HTTP访问的代理服务器设置prop.remove(xyHost);prop.remove(xyPort); prop.remove(http.nonProxyHosts);/清除HTTPS访问的代理服务器设置prop.remove(xyHost);prop.remove(xyPort);/清除FTP访问的代理服务器设置prop.remove(xyHost);prop.remove(xyPort);prop.remove( ftp.nonProxyHosts );/清除SOCKS的代
10、理服务器设置prop.remove(socksProxyHost);prop.remove(socksProxyPort);/测试HTTP访问public void showHttpProxy()throws MalformedURLException , IOExceptionURL url = new URL(”);II直接打开连接,但系统会调用刚设置的HTTP代理服务器URLConnection conn = url.openConnection();/Scanner scan = new Scanner(conn.getlnputStream();/读取远程主机的内容while(sca
11、n.hasNextLine()System.out.println(scan.nextLine();public static void main(String args)throws IOExceptionProxySelectorTest test = new ProxySelectorTest();test.setLocalProxy();test.showHttpProxy();test.removeLocalProxy();上面程序中三行粗体字代码设置Java打开HTTP访问时的代理服务器属性,其中前两行代码设置代理服务器的地址和端口,第三行代码设置该代理 HTTP访问哪些主机时不需
12、要使用代理服务器。上面程序的行代码处直接打开一个URLConnection,但系统会为打开该 URLConnection时使用代理服务器。运行上面程序,将会看到程序长时间等待,因为6通常并不是有效的代理服务器(当然,如果读者运行的机器恰好可以使用地址为6的代理服务器又另当别论)。系统提供了默认的 ProxySelector子类作为代理选择器,开发者可以实现自己的代理选择器,程序可以通过继承ProxySelector来实现自己的代理选择器。继承 ProxySelector需要重写两个方法:List select(URI uri):实现该方法让代理选择器
13、根据不同的URI来使用不同的代理服务器,该方法就是代理选择器管理网络连接使用代理服务器的关键。connectFailed(URI uri, SocketAddress sa, IOException ioe):当系统通过默认的代理服务器建立连接失败后,代理选择器将会自动调用该方法。通过重写该方法可以对连接代理服务器失败的情形进行处理。系统默认的代理服务器选择器也重写了connectFailed方法,它重写该方法的处理策略是:当系统设置的代理服务器失败时,默认代理选择器将会采用直连的方式连接远程资源,所以当运行上面程序等待了足够长时间时,程序依然可以打 印出该远程资源的所有内容。Whe n yo
14、u are old and grey and full of sleep,And no ddi ng by the fire, take dow n this book, And slowly read, and dream of the soft look Your eyes had once, and of their shadows deep; How many loved your mome nts of glad grace, And loved your beauty with love false or true, But one man loved the pilgrim so
15、ul in you, And loved the sorrows of your cha nging face; And bending dow n beside the glow ing bars, Murmur, a little sadly, how love fledAnd paced upon the mountains overhead And hid his face amid a crowd of stars.The furthest dista nee in the worldIs not betwee n life and deathBut whe n I sta nd in front of youYet you dont know thatI love you.The furthest dista nee in the worldIs not whe n I sta nd in front of youYet you cant see my loveBut whe n un doubtedly knowing the love from bothYet cannot be together.The furthest dista nee in the worldIs not being apart while being in loveBut whe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论