请问, 如何在Android终端实现Http的摘要(Digest)认证, 到网上搜了下, 都说的很笼统, 有没找到相关的API. 请高人指教.
解决方案 »
- Android控件拖动问题
- 用JAVA编写一款Box2D小游戏~
- 跪求大神帮助,我在Android项目里面给button进行SetText的时候一直报错NulPointerException
- 设置全屏之后,图片再中央。然后双击之后,出现状态栏,因为图片设置的是居中,出现状态栏之后,空间变小了,图片往下压了。这个如何解决呢
- AXMLPrinter2.jar用过的人进来下
- 安装ADT时出错,啥办?
- 求助 Android ListView ImageButton显示
- 不喜欢做android的界面开发,大家给点意见吧
- 有谁能帮忙推荐下Android+ssh开发案例的教程
- 内置APK无法启动
- 怎么获得Canvas中的一个像素点的颜色值
- 求教:有没有办法给项目中每一个按钮加入等待对话框,源码已上
client的 setCredentialsProvider(bcp) 方法:设置认证提供者BasicCredentialsProvider 类:创建认证提供者实例setCredentials 方法:设置AuthScope和UsernamePasswordCredentials类AuthScope类:认证范围,基于主机,端口和领域构建UsernamePasswordCredentials:基于用户名和口令的证书,基于用户名和口令构建
// 1. 获取并设置url地址,一个字符串变量,一个URL对象 String urlStr ="http://<host>:<port>/data.json";
URL url= new URL(urlStr);// 2. 创建一个密码证书,(UsernamePasswordCredentials类) String username="foo";
String password="bar"; UsernamePasswordCredentials upc = new UsernamePasswordCredentials(username, password);// 3. 设置认证范围 (AuthScore类)String strRealm = "<mydomain>";String strHost = url.getHost();int iPort = url.getPort();AuthScope as = new AuthScope(strHost, iPort, strRealm);// 4. 创建认证提供者(BasicCredentials类) ,基于as和upcBasicCredentialsProvider bcp=new BasicCredentialsProvider();bcp.setCredentials(as, upc);
// 5. 创建Http客户端(DefaultHttpClient类)DefaultHttpClient client=new DefaultHttpClient();// 6. 为此客户端设置认证提供者client.setCredentialsProvider(bcp);
// 7. 创建一个get 方法(HttpGet类),基于所访问的url地址HttpGet hg= new HttpGet(urlStr);
// 8. 执行get方法并返回 responseHttpResponse hr = client.execute(hg);
// 9. 从response中取回数据,使用InputStreamReader读取Response的Entity: String line=null; StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(hr.getEntity().getContent() )); while((line = reader.readLine()) != null) builder.append(line);
strContent=builder.toString();
转到博客里了
if(!name.equals("") || !password.equals(""))
{
String userPassword = name+":"+password;
String encoding = Base64.encode(userPassword).trim();
httpRequest.addHeader("Authorization", "Basic " + encoding);
}
httpRequest.setHeader("User-agent", USER_AGENT);
try
{
HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
if(httpResponse.getStatusLine().getStatusCode()==200)
{
ret = EntityUtils.toString(httpResponse.getEntity());
}else {
Log.e(TAG,"Fail: Code: " + httpResponse.getStatusLine().getStatusCode());
}
httpRequest.abort(); }catch(IOException ex)
{
Log.e(TAG,ex.toString());
}base64public class Base64 {
public final static String BASE64CODE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
"abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+/";
public final static int SPLIT_LINES_AT = 76;
public static byte[] zeroPad(int length, byte[] bytes) {
byte[] padded = new byte[length]; // initialized to zero by JVM
System.arraycopy(bytes, 0, padded, 0, bytes.length);
return padded;
}
public static String encode(String string) {
String encoded = "";
byte[] stringArray;
try {
stringArray = string.getBytes("UTF-8"); // use appropriate encoding string!
} catch (Exception ignored) {
stringArray = string.getBytes(); // use locale default rather than croak
}
// determine how many padding bytes to add to the output
int paddingCount = (3 - (stringArray.length % 3)) % 3;
// add any necessary padding to the input
stringArray = zeroPad(stringArray.length + paddingCount, stringArray);
// process 3 bytes at a time, churning out 4 output bytes
// worry about CRLF insertions later
for (int i = 0; i < stringArray.length; i += 3) {
int j = (stringArray[i] << 16) + (stringArray[i + 1] << 8) +
stringArray[i + 2];
encoded = encoded + BASE64CODE.charAt((j >> 18) & 0x3f) +
BASE64CODE.charAt((j >> 12) & 0x3f) +
BASE64CODE.charAt((j >> 6) & 0x3f) +
BASE64CODE.charAt(j & 0x3f);
}
// replace encoded padding nulls with "="
String ret = splitLines(encoded.substring(0, encoded.length() -
paddingCount) + "==".substring(0, paddingCount));
return ret.trim();
}
public static String splitLines(String string) {
String lines = "";
for (int i = 0; i < string.length(); i += SPLIT_LINES_AT) {
lines += string.substring(i, Math.min(string.length(), i + SPLIT_LINES_AT));
lines += "\r\n";
}
return lines;
}
}
2.有没有摘要(HTTP Digest)认证的例子.