URL 授权访问另外一种方法,利用 Java 1.1 访问密码保护的 URL
http://blog.csdn.net/jserkang/archive/2005/03/13/318623.aspx
?
接入9588短信網(wǎng)關(guān)(http協(xié)議),9588的iis上的短信服務(wù)url需要身份驗(yàn)證,
在程序中使用的URL:http://UserName:Password@000.000.000.000/SmbpHttpAgent/
接入java代碼:
URL url = new URL(buf.toString()); System.out.println("****"+buf.toString() );?
HttpURLConnection conn = (HttpURLConnection)url.openConnection();?
String password = "user:password;?
BASE64Encoder base = new BASE64Encoder();?
String encodedPassword = base.encode(password.getBytes());?
conn.setRequestProperty("Authorization", "Basic " + encodedPassword);?
conn.setRequestMethod("GET");?
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while(in.readLine()!=null){ out.println(in.readLine()); bool = true; }
接入asp代碼
function SendMessage(mobile,strMessage)
?Dim str,url,postmsg
?url="http://000.000.000.00/SmbpHttpAgent/Sxxxxxxx
?
?Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
Set xmlDOC =Server.CreateObject("MSXML.DOMDocument")
'設(shè)置參數(shù)及其值
strRequest = url1
objHTTP.Open "POST", postmsg, False,"接入帳號","接入密碼"
'設(shè)置這個(gè)Content-Type很重要
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send(strRequest)
bOK = xmlDOC.load(objHTTP.responseXML)
'看看狀態(tài)值
if objHTTP.Status=200 then?
xmlStr = xmlDOC.xml
Response.Write xmlStr
else
Response.Write objHTTP.Status&"<br>"
Response.Write objHTTP.StatusText
end if
end function
John Zukowski
?
摘要
在上一篇的tip, Java Tip 46, 描述了如何利用Java 程序訪問密碼保護(hù)的 URL,通過 Java 1.2 的新的 Authenticator 類。如果你或者你的用戶轉(zhuǎn)到 Java 1.1 下該怎么辦呢?基本上,沒有 Java 1.2,你會(huì)失掉 Authenticator帶來的好處。但別失望! 這篇文章將展示 Java 1.1 小程序片和應(yīng)用程序如 何訪問需要輸入用戶名稱和密碼的R訪問需要輸入用戶名稱和密碼的 URLs.(1250字)
非常感謝 David Wallace Croft,他跟蹤并修復(fù)了 Base64Converter 類的原始版本的一個(gè) bug, ?經(jīng)過修改的類的源代碼在這篇短文中列出。
在上一篇技巧中,我們引入了如下的場景:你使用喜歡的瀏覽器在網(wǎng)上沖浪,并遇到了一個(gè)URL 需要代理或HTTP服務(wù)器的授權(quán)。在屏幕上出現(xiàn)的是一個(gè)標(biāo)準(zhǔn)的對話框,必須在其中輸入你的用戶名稱和密碼來訪問這個(gè)站點(diǎn)。為了更清楚起見,屏幕上的對話框如下圖所示。
?
在 Java 程序中,你將發(fā)現(xiàn)一個(gè)問題:當(dāng)你試圖從 InputStream 中讀取和URL相關(guān)的信息時(shí),一個(gè) FileNotFoundException將會(huì)拋出。
從 Java 1.2開始,可以利用 Authenticator 類,如上面所提到的,在 Java Tip 46 你已經(jīng)學(xué)到。然而,在比Java 1.2 早的版本
中,在試圖從 URL 中讀取數(shù)據(jù)之前首先需要知道所訪問的 URL 是否是受密碼保護(hù)的。如果 URL 是密碼保護(hù)的,必須手動(dòng)的確認(rèn)每
個(gè)URL 的密碼保護(hù)響應(yīng),然后才能訪問所需要的內(nèi)容。密碼保護(hù)響應(yīng)以授權(quán)要求屬性的形式出現(xiàn)。這種屬性通過 URLConnection 和?br /> URL相關(guān)聯(lián)。一旦授權(quán)要求被滿足,當(dāng)?shù)竭_(dá)某個(gè) URL 時(shí),上面的信息是可以被訪問的。
授權(quán)字符有著如下的形式“Authorization: Basic 用戶名:密碼,”其中,基本授權(quán)字段以Base64格式編碼。(編碼格式的描述可以
可以在 RFC 1113 中得到。一個(gè)RFC是一個(gè)“requst for comment”文檔,基本上描述某些Internet 標(biāo)準(zhǔn),在本例中,#1113 描述
了消息加密和授權(quán)程序,參見下面的 資源 ),為了編碼,可以使用 sun.misc package 中的 BASE64Encoder 類,或者創(chuàng)建自己的類。?
?
為了建立這個(gè)訪問,只需簡單的確認(rèn) URL's URLConnection 是否有“授權(quán)”要求屬性。下面的步驟描述了怎樣進(jìn)行。
步驟1:創(chuàng)建 URL
URL url = new URL (urlString);
步驟2:為specificURL 獲得用戶名稱和密碼
步驟3:將它們放入String并用冒號":"分開
String userPassword = theUsername + ":" + thePassword;
步驟4:對字符串進(jìn)行編碼
String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());
步驟5: 通過 URL 創(chuàng)建 URLConnection
URLConnection uc = url.openConnection();
步驟6:為URLConnection 設(shè)置“授權(quán)”要求屬性
uc.setRequestProperty ("Authorization", "Basic " + encoding);
?
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/jserkang/archive/2005/03/13/318623.aspx
總結(jié)
以上是生活随笔為你收集整理的URL 授权访问另外一种方法,利用 Java 1.1 访问密码保护的 URL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log4j 调试时候配置
- 下一篇: 从程序员到CTO的Java技术路线图 (