URL 授权访问另外一种方法,利用 Java 1.1 访问密码保护的 URL

http://blog.csdn.net/jserkang/archive/2005/03/13/318623.aspx

 

接入9588短信网关(http协议),9588的iis上的短信服务url需要身份验证,

在程序中使用的URL:http://UserName:[email protected]/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")

'设置参数及其值
strRequest = url1
objHTTP.Open "POST", postmsg, False,"接入帐号","接入密码"
'设置这个Content-Type很重要
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send(strRequest)
bOK = xmlDOC.load(objHTTP.responseXML)
'看看状态值
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 程序访问密码保护的 URL,通过 Java 1.2 的新的 Authenticator 类。如果你或者你的用户转到 Java 1.1 下该怎么办呢?基本上,没有 Java 1.2,你会失掉 Authenticator带来的好处。但别失望! 这篇文章将展示 Java 1.1 小程序片和应用程序如 何访问需要输入用户名称和密码的R访问需要输入用户名称和密码的 URLs.(1250字)

非常感谢 David Wallace Croft,他跟踪并修复了 Base64Converter 类的原始版本的一个 bug, ?经过修改的类的源代码在这篇短文中列出。
在上一篇技巧中,我们引入了如下的场景:你使用喜欢的浏览器在网上冲浪,并遇到了一个URL 需要代理或HTTP服务器的授权。在屏幕上出现的是一个标准的对话框,必须在其中输入你的用户名称和密码来访问这个站点。为了更清楚起见,屏幕上的对话框如下图所示。

 

在 Java 程序中,你将发现一个问题:当你试图从 InputStream 中读取和URL相关的信息时,一个 FileNotFoundException将会抛出。


从 Java 1.2开始,可以利用 Authenticator 类,如上面所提到的,在 Java Tip 46 你已经学到。然而,在比Java 1.2 早的版本
中,在试图从 URL 中读取数据之前首先需要知道所访问的 URL 是否是受密码保护的。如果 URL 是密码保护的,必须手动的确认每
个URL 的密码保护响应,然后才能访问所需要的内容。密码保护响应以授权要求属性的形式出现。这种属性通过 URLConnection 和?br /> URL相关联。一旦授权要求被满足,当到达某个 URL 时,上面的信息是可以被访问的。


授权字符有着如下的形式“Authorization: Basic 用户名:密码,”其中,基本授权字段以Base64格式编码。(编码格式的描述可以
可以在 RFC 1113 中得到。一个RFC是一个“requst for comment”文档,基本上描述某些Internet 标准,在本例中,#1113 描述
了消息加密和授权程序,参见下面的 资源 ),为了编码,可以使用 sun.misc package 中的 BASE64Encoder 类,或者创建自己的类。
?

为了建立这个访问,只需简单的确认 URL's URLConnection 是否有“授权”要求属性。下面的步骤描述了怎样进行。


步骤1:创建 URL

URL url = new URL (urlString);


步骤2:为specificURL 获得用户名称和密码


步骤3:将它们放入String并用冒号":"分开


String userPassword = theUsername + ":" + thePassword;


步骤4:对字符串进行编码

String encoding = new sun.misc.BASE64Encoder().encode (userPassword.getBytes());


步骤5: 通过 URL 创建 URLConnection

URLConnection uc = url.openConnection();


步骤6:为URLConnection 设置“授权”要求属性

uc.setRequestProperty ("Authorization", "Basic " + encoding);

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jserkang/archive/2005/03/13/318623.aspx

 

你可能感兴趣的:(java,String,HTTP服务器,url,basic,authorization)