人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

用Java編寫通過(guò)代理訪問(wèn)的應(yīng)用程序

用Java編寫通過(guò)代理訪問(wèn)的應(yīng)用程序

更新時(shí)間:2022-07-22 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

  本技巧將向您講述如何編寫可通過(guò)代理訪問(wèn)因特網(wǎng)上的Web服務(wù)器的Java應(yīng)用程序。在Java應(yīng)用程序中加入代理支持只需額外編寫幾行代碼,且不依賴任何安全性“漏洞”。

  幾乎所有的公司都十分關(guān)注保護(hù)自己的內(nèi)部網(wǎng)絡(luò),以防黑客及入竊者。一種常見的安全措施是完全斷開與因特網(wǎng)的連接。如果黑客們不能連接到您的任何一臺(tái)機(jī)器,他們就不能非法進(jìn)入您的系統(tǒng)。這種策略產(chǎn)生的不利副作用是,內(nèi)部用戶無(wú)法訪問(wèn)外部的因特網(wǎng)服務(wù)器,如Yahoo或JavaWorld。為了解決這一問(wèn)題,網(wǎng)絡(luò)管理員通常安裝“代理服務(wù)器”。實(shí)際上,代理是安裝于因特網(wǎng)和內(nèi)部網(wǎng)之間的一種服務(wù),用來(lái)管理這兩個(gè)領(lǐng)域之間的連接。代理有助于減少安全性的外部威脅,同時(shí)還允許內(nèi)部用戶訪問(wèn)因特網(wǎng)服務(wù)。盡管Java使得編寫因特網(wǎng)客戶機(jī)不再困難,但是如果客戶機(jī)不能通過(guò)代理,則它們毫無(wú)用處。幸運(yùn)的是,Java使得使用代理支持不再困難--如果您知道密訣,這就是事實(shí)。
將Java和代理結(jié)合起來(lái)的秘訣即在Java運(yùn)行時(shí)激活特定的系統(tǒng)屬性。這些屬性未被寫入正式文件,只是作為Java傳說(shuō)的一部分在Java編程人員中秘傳。為了支持代理,Java應(yīng)用程序不僅需要指定代理本身的信息,而且需要指定用于認(rèn)證的用戶信息。在開始使用網(wǎng)際協(xié)議之前,您需要在程序中添加以下幾行代碼:

System.getProperties().put("proxySet","true");
System.getProperties().put("proxyHost","myProxyMachineName");
System.getProperties().put("proxyPort","85");

  上面的第一行通知Java您要通過(guò)代理進(jìn)行連接,第二行指定代理所在的機(jī)器,第三行指定代理監(jiān)聽的端口。有些代理在授權(quán)用戶訪問(wèn)因特網(wǎng)之前,要求用戶輸入用戶名和口令。如果您使用位于防火墻之內(nèi)的Web瀏覽器,您就可能碰到過(guò)這種情況。以下是執(zhí)行認(rèn)證的方法:

URLConnectionconnection=url.openConnection();
Stringpassword="username:password";
StringencodedPassword=base64Encode(password);
connection.setRequestProperty("Proxy-Authorization",encodedPassword);

  這段代碼的思想是,您必須調(diào)整HTTP標(biāo)頭以發(fā)出用戶信息。這是通過(guò)調(diào)用setRequestProperty()來(lái)實(shí)現(xiàn)的。這種方法允許您在發(fā)出請(qǐng)求之前處理HTTP標(biāo)頭。HTTP要求用base64對(duì)用戶名和口令進(jìn)行編碼。幸運(yùn)的是,有一組公用域API,它們將代您執(zhí)行編碼(請(qǐng)參閱參考資源部分)。

  如您所見,在Java應(yīng)用程序中加入代理支持并不需要做多少工作。有了現(xiàn)在的知識(shí),再做一點(diǎn)研究(您必須查明您的代理是如何處理您感興趣的協(xié)議以及如何進(jìn)行用戶認(rèn)證的),您就能用其他協(xié)議實(shí)現(xiàn)代理。

  FTP代理

  ScottD.Taylor提出這個(gè)秘訣來(lái)處理FTP協(xié)議代理:

defaultProperties.put("ftpProxySet","true");
defaultProperties.put("ftpProxyHost","proxy-host-name");
defaultProperties.put("ftpProxyPort","85");

  接下來(lái)您便可以通過(guò)以下代碼使用"ftp"協(xié)議訪問(wèn)文件URL:

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

  如果有人有使用其他網(wǎng)際協(xié)議代理的例子,我很想看看。

  注意:代碼示例(Example.java)僅在JDK1.1.4下測(cè)試過(guò)。

  后續(xù)技巧!

  對(duì)于仍在使用JDK1.1.7(配合WebSphere3.0)的開發(fā)人員而言,將proxyHost和proxyPort設(shè)為系統(tǒng)屬性不起作用;conn.getInputStream()或者返回連接超時(shí),或者是找不到主機(jī)路徑。但是,我使用接受Host和Port為參數(shù)的URL構(gòu)造函數(shù)解決了這一問(wèn)題(使用我的代理主機(jī)和端口):

publicURL(Stringprotocol,Stringhost,intport,Stringfile).

  借助用戶名和口令進(jìn)行認(rèn)證的方法不起作用。應(yīng)將"Basic"置于認(rèn)證字符串的開頭;例如:

StringencodedPassword=base64Encode(password);

  應(yīng)該是:

StringencodedPassword="Basic"+base64Encode(password);

  您也不必用一個(gè)單獨(dú)的程序來(lái)進(jìn)行64位編碼。您可以使用sun.misc.BASE64Encoder()類。下面是完成這兩處改動(dòng)之后的代碼:

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代理服務(wù)器的方法:

System.getProperty("socksProxySet",true);
System.getProperty("socksProxyHost",proxyHostName);
System.getProperty("socksProxyPort",proxyPort);
UsuallytheproxyPortforSocks4isport1080

  接下來(lái)您就可以用Socks4進(jìn)行連接了。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 高陵县| 循化| 乐昌市| 隆德县| 安图县| 泾阳县| 西乌珠穆沁旗| 沅陵县| 铅山县| 岳阳市| 湖北省| 华安县| 安龙县| 彭阳县| 蒙自县| 关岭| 密云县| 开鲁县| 祁门县| 贵溪市| 马鞍山市| 东海县| 炉霍县| 曲阳县| 临潭县| 萝北县| 通化县| 宁德市| 平潭县| 柘荣县| 无极县| 怀来县| 台江县| 郯城县| 青冈县| 乐山市| 天水市| 兖州市| 禄丰县| 新沂市| 得荣县|