


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、在 Java 中,使用proxy 是通過(guò)設(shè)置java 環(huán)境變量來(lái)實(shí)現(xiàn)的,也就是JVM 的系統(tǒng)屬性。我們需要設(shè)置三個(gè)屬性,proxySetproxyHost 和 proxyPort 。proxySet 是個(gè) boolean 類(lèi)型的,可以設(shè)置為true 或者 false, true 代表使用代理服務(wù)器。proxyHost 是代理服務(wù)器的IP 地址proxyPort 是代理服務(wù)器的端口地址。我們有兩種方法設(shè)置這種系統(tǒng)屬性,一種是命令行下運(yùn)行Java 程序的時(shí)候,通過(guò)參數(shù)付值一種是在java 源程序中設(shè)置。第一種方法的格式如下:java-DproxySet=true-DproxyHost=myProx
2、ySe-DproxyPort=80MyJavaApp第二種方法,就是直接在源程序中通過(guò)系統(tǒng)屬性來(lái)寫(xiě),如下:importjava.util.Properties;.strProxy="7"strPort="8080"PropertiessystemProperties=System.getProperties;systemProperties.setProperty;systemProperties.setProperty;JDK1.3 以上版本,只要設(shè)置了proxyHost 和 proxyPort 就不用寫(xiě)proxySet 了。下面是
3、一個(gè)完整的例子:strUrl=""URLurl=newURL;URLConnectionconn=url.openConnection;strProxy="7"strPort="8080"PropertiessystemProperties=System.getProperties;systemProperties.setProperty;systemProperties.setProperty;BufferedReaderrd=newBufferedReader);while)!=null)rd.close;17
4、.5.2使用 ProxySelector選擇代理服務(wù)器前面介紹的直接使用 Proxy 對(duì)象可以在打開(kāi) URLConnection 或 Socket 時(shí)指定代理服務(wù)器,使用這種方式需要每次打開(kāi)連接都顯式設(shè)置代理服務(wù)器。如果想讓系統(tǒng)打開(kāi)連接時(shí)總是具有默認(rèn)的代理服務(wù)器,則可以使用.ProxySelector,它可以它根據(jù)不同的連接使用不同的代理服務(wù)器。系統(tǒng)默認(rèn)的ProxySelector會(huì)檢測(cè)各種系統(tǒng)屬性和URL協(xié)議,然后決定怎樣連接不同的主機(jī)。當(dāng)然,程序也可以調(diào)用ProxySelector類(lèi)的 setDefaultI()靜態(tài)方法來(lái)設(shè)置默認(rèn)代理服務(wù)器,也可以調(diào)用getDefault()方法獲得系統(tǒng)當(dāng)
5、前默認(rèn)的代理服務(wù)器。程序可以通過(guò)System 類(lèi)來(lái)設(shè)置系統(tǒng)的代理服務(wù)器屬性,關(guān)于代理服務(wù)器常用的屬性名有如下三個(gè):xyHost:設(shè)置 HTTP訪(fǎng)問(wèn)所使用的代理服務(wù)器地址。該屬性名的前綴可以改為https 、 ftp等,分別用于設(shè)置HTTP訪(fǎng)問(wèn)、安全HTTP訪(fǎng)問(wèn)和 FTP 訪(fǎng)問(wèn)所用的代理服務(wù)器地址。xyPort:設(shè)置 HTTP訪(fǎng)問(wèn)所使用的代理服務(wù)器端口。該屬性名的前綴可以改為https 、 ftp等,分別用于設(shè)置HTTP訪(fǎng)問(wèn)、安全HTTP訪(fǎng)問(wèn)和 FTP 訪(fǎng)問(wèn)所用的代理服務(wù)器端口。http.nonProxyHosts:設(shè)置 HTTP訪(fǎng)問(wèn)中不需要使用代理服務(wù)器的遠(yuǎn)程主
6、機(jī),可以使用* 通配符,如果有多個(gè)地址,多個(gè)地址用豎線(xiàn)( | )分隔。下面程序示范了通過(guò)改變系統(tǒng)屬性來(lái)改變默認(rèn)的代理服務(wù)器。程序清單: codes/17/17-5/ ProxySelectorTest.javapublic class ProxySelectorTest/ 測(cè)試本地 JVM 的網(wǎng)絡(luò)默認(rèn)配置 public void setLocalProxy()Properties prop = System.getProperties();/ 設(shè)置 HTTP 訪(fǎng)問(wèn)要使用的代理服務(wù)器的地址 prop.setProperty("xyHost", "10
7、.10.0.96");/ 設(shè)置 HTTP 訪(fǎng)問(wèn)要使用的代理服務(wù)器的端口 prop.setProperty("xyPort", "8080");/ 設(shè)置 HTTP 訪(fǎng)問(wèn)不需要通過(guò)代理服務(wù)器訪(fǎng)問(wèn)的主機(jī),/ 可以使用 * 通配符,多個(gè)地址用 | 分隔 prop.setProperty("http.nonProxyHosts", "localhost|10.20.*");/ 設(shè)置安全 HTTP 訪(fǎng)問(wèn)使用的代理服務(wù)器地址與端口/ 它沒(méi)有 https.nonProxyHosts 屬性,它按照 http
8、.nonProxyHosts 中設(shè)置的規(guī)則訪(fǎng)問(wèn) prop.setProperty("xyHost", "6"); prop.setProperty("xyPort", "443");/ 設(shè)置 FTP 訪(fǎng)問(wèn)的代理服務(wù)器的主機(jī)、端口以及不需要使用代理服務(wù)器的主機(jī)prop.setProperty("xyHost", "6");prop.setProperty("xyPo
9、rt", "2121");prop.setProperty("ftp.nonProxyHosts", "localhost|10.10.*");/ 設(shè)置 socks 代理服務(wù)器的地址與端口 prop.setProperty("socks.ProxyHost", "6"); prop.setProperty("socks.ProxyPort", "1080");/ 清除 proxy 設(shè)置public void removeLoca
10、lProxy()Properties prop = System.getProperties();/ 清除 HTTP 訪(fǎng)問(wèn)的代理服務(wù)器設(shè)置 prop.remove("xyHost"); prop.remove("xyPort"); prop.remove("http.nonProxyHosts");/ 清除 HTTPS 訪(fǎng)問(wèn)的代理服務(wù)器設(shè)置 prop.remove("xyHost"); prop.remove("xyPort")
11、;/ 清除 FTP 訪(fǎng)問(wèn)的代理服務(wù)器設(shè)置prop.remove("xyHost");prop.remove("xyPort");prop.remove("ftp.nonProxyHosts");/ 清除 SOCKS 的代理服務(wù)器設(shè)置 prop.remove("socksProxyHost"); prop.remove("socksProxyPort");/ 測(cè)試 HTTP 訪(fǎng)問(wèn)public void showHttpProxy()throws MalformedURL
12、Exception , IOExceptionURL url = new URL("");/ 直接打開(kāi)連接,但系統(tǒng)會(huì)調(diào)用剛設(shè)置的HTTP 代理服務(wù)器URLConnection conn = url.openConnection();/Scanner scan = new Scanner(conn.getInputStream();/ 讀取遠(yuǎn)程主機(jī)的內(nèi)容while(scan.hasNextLine()System.out.println(scan.nextLine();public static void main(String args)throws IOException
13、ProxySelectorTest test = new ProxySelectorTest(); test.setLocalProxy();test.showHttpProxy();test.removeLocalProxy();上面程序中三行粗體字代碼設(shè)置Java 打開(kāi) HTTP訪(fǎng)問(wèn)時(shí)的代理服務(wù)器屬性,其中前兩行代碼設(shè)置代理服務(wù)器的地址和端口,第三行代碼設(shè)置該代理HTTP訪(fǎng)問(wèn)哪些主機(jī)時(shí)不需要使用代理服務(wù)器。上面程序的行代碼處直接打開(kāi)一個(gè)URLConnection ,但系統(tǒng)會(huì)為打開(kāi)該URLConnection 時(shí)使用代理服務(wù)器。運(yùn)行上面程序,將會(huì)看到程序長(zhǎng)時(shí)間等待,因?yàn)?192.168.0.
14、96 通常并不是有效的代理服務(wù)器(當(dāng)然,如果讀者運(yùn)行的機(jī)器恰好可以使用地址為 6 的代理服務(wù)器又另當(dāng)別論)。系統(tǒng)提供了默認(rèn)的ProxySelector子類(lèi)作為代理選擇器,開(kāi)發(fā)者可以實(shí)現(xiàn)自己的代理選擇器,程序可以通過(guò)繼承ProxySelector來(lái)實(shí)現(xiàn)自己的代理選擇器。繼承ProxySelector需要重寫(xiě)兩個(gè)方法:List<Proxy> select(URI uri):實(shí)現(xiàn)該方法讓代理選擇器根據(jù)不同的URI 來(lái)使用不同的代理服務(wù)器,該方法就是代理選擇器管理網(wǎng)絡(luò)連接使用代理服務(wù)器的關(guān)鍵。connectFailed(URI uri, SocketAddress s
15、a, IOException ioe):當(dāng)系統(tǒng)通過(guò)默認(rèn)的代理服務(wù)器建立連接失敗后,代理選擇器將會(huì)自動(dòng)調(diào)用該方法。通過(guò)重寫(xiě)該方法可以對(duì)連接代理服務(wù)器失敗的情形進(jìn)行處理。系統(tǒng)默認(rèn)的代理服務(wù)器選擇器也重寫(xiě)了 connectFailed 方法,它重寫(xiě)該方法的處理策略是:當(dāng)系統(tǒng)設(shè)置的代理服務(wù)器失敗時(shí),默認(rèn)代理選擇器將會(huì)采用直連的方式連接遠(yuǎn)程資源,所以當(dāng)運(yùn)行上面程序等待了足夠長(zhǎng)時(shí)間時(shí),程序依然可以打印出該遠(yuǎn)程資源的所有內(nèi)容。When you are old and grey and full of sleep,And nodding by the fire, take down this book,And
16、 slowly read, and dream of the soft lookYour eyes had once, and of their shadows deep;How many loved your moments of glad grace,And loved your beauty with love false or true,But one man loved the pilgrim soul in you,And loved the sorrows of your changing face;And bending down beside the glowing bars
17、,Murmur, a little sadly, how love fledAnd paced upon the mountains overheadAnd hid his face amid a crowd of stars.The furthest distance in the worldIs not between life and deathBut when I stand in front of youYet you don't know thatI love you.The furthest distance in the worldIs not when I stand in front of youYet you can't see my loveBut when undoubtedly knowing the love from bothYet cannot be together.The furthest distance in the worldIs not being
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外聘人員合同解除協(xié)議書(shū)
- 勞務(wù)人身?yè)p害和解協(xié)議書(shū)
- 北京車(chē)牌結(jié)婚過(guò)戶(hù)協(xié)議書(shū)
- 農(nóng)村兄弟土地分家協(xié)議書(shū)
- 技術(shù)服務(wù)協(xié)議終止協(xié)議書(shū)
- 業(yè)主集體退房破產(chǎn)協(xié)議書(shū)
- 中外企業(yè)員工勞動(dòng)協(xié)議書(shū)
- 招待客戶(hù)用餐合同范本
- 二手車(chē)行售車(chē)合同范本
- 拆遷門(mén)窗回收安全協(xié)議書(shū)
- 空調(diào)風(fēng)道改造技術(shù)方案
- 前懸掛整稈式甘蔗收割機(jī)雙刀盤(pán)切割與喂入裝置設(shè)計(jì)與試驗(yàn)的中期報(bào)告
- 《林業(yè)科普知識(shí)》課件
- 國(guó)開(kāi)電大操作系統(tǒng)-Linux系統(tǒng)使用-實(shí)驗(yàn)報(bào)告
- 《小學(xué)生C++創(chuàng)意編程》第3單元課件 選擇結(jié)構(gòu)
- 《古代的村落、集鎮(zhèn)和城市》統(tǒng)編版161
- KROHNE 轉(zhuǎn)子流量計(jì)產(chǎn)品介紹 2022
- 廣播員培訓(xùn)材料
- 體育中國(guó)學(xué)習(xí)通章節(jié)答案期末考試題庫(kù)2023年
- 呼吸康復(fù)呼吸肌訓(xùn)練課件
- 中小學(xué)鐵路安全知識(shí)主題教育課件
評(píng)論
0/150
提交評(píng)論