android的http基础验证

你不应当使用http basic验证。那是不安全的,因为它通过请求头发送用户名和密码。你应当考虑一些像OAuth这样的来代替它。

但是撇开原由,有时候你会使用它。而且你会发现,没有具备证明文件的方法工作。你能在没有成功的情况下尝试他们的每个单独的方法。因此你不应道依赖Apache库的方法。你应道自己实现验证。

让我们切入正题:客户端这边验证包含一个被叫做Authorization的http头。它的值是一个Base64编码字符串,下面是它的格式:

username:password

编码之后,这个头将看起来像这样:

Authorization:Basic
QWxhZGRpbjpvcGVuIHNlc2FtZQ==

了解了这些,我们只是需要用那种格式创建一个header追加到请求中。

下面的代码要求Android 2.2才可以运行:

HttpUriRequest
request = new HttpGet(YOUR_URL); // Or HttpPost(), depends on your needs

String
credentials = YOUR_USERNAME + ":" + YOUR_PASSWORD;

String
base64EncodedCredentials = Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);

request.addHeader("Authorization",
"Basic " + base64EncodedCredentials);

HttpClient
httpclient = new DefaultHttpClient();

httpclient.execute(request);

//
You‘ll need to handle the exceptions thrown by execute()

对Base64.NOWRAP参数要特别注意,没有它,这个代码片段式不能运行的。

希望能有帮助。

You shouldn‘t use HTTP basic authentication. It‘s unsafe, since it sends the username and the password through the request headers. You should consider something
like OAuth instead.

But, reasons aside, sometimes you‘ll need to use it. And you‘ll find that none of the documented methods
work. You can try every single one of themwithout
success. So you shouldn‘t rely on the methods of the Apache library. You should do the authentication yourself.

HOW IT WORKS

Let‘s cut to the chase: the client-side authentication consists on a HTTP header called Authorization.
Its value is a Base64-encoded string, with the following format:

username:password

After encoded, the header will look like this:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Knowing that, we just need to create a header with that format and append to the request.

THE SNIPPET

Tho code below requires Android 2.2 to work (API level 8):

HttpUriRequest request = new HttpGet(YOUR_URL); // Or HttpPost(), depends on your needs  
String credentials = YOUR_USERNAME + ":" + YOUR_PASSWORD;  
String base64EncodedCredentials = Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);  
request.addHeader("Authorization", "Basic " + base64EncodedCredentials);

HttpClient httpclient = new DefaultHttpClient();  
httpclient.execute(request);  
// You‘ll need to handle the exceptions thrown by execute()

Pay special attention to the Base64.NO_WRAP param.
Without it, the snippet won‘t work.

Hope it helps!

时间: 2024-09-17 20:37:47

android的http基础验证的相关文章

android客户端向服务器端验证登陆方法的实现1

遇到的问题:一个条件查询与多个条件查询,所用到的方式不一样 参考文档: http://www.oschina.net/question/1160609_133366    mybatis多条件查询的一个错误 解决方案如下: 利用序列号的方式解决多个参数的查询问题.对象与数据库关系的映射层. 层次结构如下: 首先定义model层里面的Userlist类,这是和我们后台mysql里面的表是一一对应的,然后定义UserlistMapper类,这个类主要是用来封装一些个方法,比如说增删改查等.其实现通过

android客户端向服务器端验证登陆方法的实现2

一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html      android获取web服务器端session并验证登陆 http://blog.csdn.net/cainiao123hack/article/details/8255848   服务器端向Android客户端传值--登录实现 http://zhidao.baidu.com/link?url=8g9EWhyUkUgUr1dh

Java(Android)线程池---基础篇

1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? 1 newThread(newRunnable(){ 2 3 @Override 4 publicvoidrun(){ 5 // TODO Auto-generated method stub 6 } 7 }).start(); 那你就out太多了,new Thread的弊端如下: a. 每次new Thread新建对象性能差.b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致

Android 触摸手势基础 官方文档概览2

Android 触摸手势基础 官方文档概览 触摸手势检测基础 手势检测一般包含两个阶段: 1.获取touch事件数据 2.解析这些数据,看它们是否满足你的应用所支持的某种手势. 相关API: MotionEvent 兼容版的: MotionEventCompat  (Note that MotionEventCompat is not a replacement for the MotionEvent class. Rather, it provides static utility metho

Android触控基础:MotionEvent

之前的文章层从Framework层介绍了Android Touch事件即(MotionEvent)的传递机制.本文将详细介绍MotionEvent的一些成员和方法.了解了MotionEvent对开发一些特效如拖动控件或多点缩放控件有很大的作用.同时,掌握MotionEvent类也是学好android触控技术的基础. 一.一些常量 常见的动作常量: public static final int ACTION_DOWN             = 0;单点触摸动作 public static fi

Android之短信验证

一.目标 实现Android短信验证 二.下面用一个简单的案例来完成这个功能 1.首先下载短信验证SDK 下载短信验证SDK官网地址:http://www.mob.com 找到SDK下载,在SMS里找到"SMSSDK For Android"下载, 如图: 2.下载完成之后: 将SMSSDK文件夹下的两个.jar文件和.aar文件复制到你项目的Project->app->libs目录下 如图所示: 3.在Android->Gradle Scripts->buli

Android开发面试基础题——转自一位本科应届生的面试经历

(我已经开始着手整理这些知识点,有兴趣可以去本人博客的java分类下查看) 基础这东西,各个公司都很看重,尤其是BAT这种大公司,他们看中人的潜力,他们舍得花精力去培养,所以基础是重中之重.之前很多人问我,项目经历少怎么办,那就去打牢基础,当你的基础好的发指的时候,你的其他东西都不重要了. 基础无外乎几部分:语言(C/C++或java),操作系统,TCP/IP,数据结构与算法,再加上你所熟悉的领域.这里面其实有很多东西,各大面试宝典都有列举. 在这只列举了Android客户端所需要的和我面试中所

Java类加载器及Android类加载器基础

引子 Android插件化与热更新技术日渐成熟,当你研究这些技术时会发现类加载器在其中占据重要地位.Java语言天生就有灵活性.动态性,支持运行期间动态组装程序,而这一切的基础就是类加载器. Java中的类加载器 Java灵活性和动态性的原因 Java源代码被编译器编译成字节码,即从.java文件编译为.class文件,而.class文件就是通过类加载器加载到虚拟机内存中的. 虚拟机的类加载(Class Loading)过程分为加载.链接(验证.准备.解析).初始化.使用.卸载等过程.这里仅考虑

Android开发学习——基础学习

在微信公众号上,发现一个自学android的一个文章,觉得不错.对其进行小小总结,整理给大家. 1. 基础UI学习 Button/TextView/EditText/CheckBox/ImageView/GirdView等,在activityMain.xml里设置,在屏幕上占一块地方. 可以设置这些组件的属性, :id(唯一标识) :layout_width(宽) :layout_height(高) :text(文本) :textsize/textcolor/textstyle :layout_