Android的OkHttp包处理用户认证的代码实例分享

 更新时间:2016年07月13日 16:00:48   作者:成富  
OkHttp包(GitHub主页github.com/square/okhttp)是一款高人气安卓HTTP支持包,这里我们来看一下Android的OkHttp包处理用户认证的代码实例分享:

OkHttp 提供了对用户认证的支持。当 HTTP 响应的状态代码是 401 时,OkHttp 会从设置的 Authenticator 对象中获取到新的 Request 对象并再次尝试发出请求。Authenticator 接口中的 authenticate 方法用来提供进行认证的 Request 对象,authenticateProxy 方法用来提供对代理服务器进行认证的 Request 对象。
用户认证的示例:

OkHttpClient client = new OkHttpClient();
client.setAuthenticator(new Authenticator() {
public Request authenticate(Proxy proxy, Response response) throws IOException {
  String credential = Credentials.basic("user", "password");
  return response.request().newBuilder()
      .header("Authorization", credential)
      .build();
}

public Request authenticateProxy(Proxy proxy, Response response) 
throws IOException {
  return null;
}
});

进阶
当需要实现一个 Basic challenge, 使用 Credentials.basic(username, password) 来编码请求头。

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
 client.setAuthenticator(new Authenticator() {
  @Override public Request authenticate(Proxy proxy, Response response) {
   System.out.println("Authenticating for response: " + response);
   System.out.println("Challenges: " + response.challenges());
   String credential = Credentials.basic("jesse", "password1");
   return response.request().newBuilder()
     .header("Authorization", credential)
     .build();
  }

  @Override public Request authenticateProxy(Proxy proxy, Response response) {
   return null; // Null indicates no attempt to authenticate.
  }
 });

 Request request = new Request.Builder()
   .url("http://publicobject.com/secrets/hellosecret.txt")
   .build();

 Response response = client.newCall(request).execute();
 if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

 System.out.println(response.body().string());
}

相关文章

  • 快速关闭android studio的自动保存功能教程

    快速关闭android studio的自动保存功能教程

    这篇文章主要介绍了快速关闭android studio的自动保存功能教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Flutter中如何加载并预览本地的html文件的方法

    Flutter中如何加载并预览本地的html文件的方法

    这篇文章主要介绍了Flutter中如何加载并预览本地的html文件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Android中截取当前屏幕图片的实例代码

    Android中截取当前屏幕图片的实例代码

    该篇文章是说明在Android手机或平板电脑中如何实现截取当前屏幕的功能,并把截取的屏幕保存到SDCard中的某个目录文件夹下面。实现的代码如下:
    2013-08-08
  • 完美解决Android三星手机从图库选择照片旋转问题

    完美解决Android三星手机从图库选择照片旋转问题

    这篇文章主要帮助大家完美解决了Android三星手机从图库选择照片旋转问题,很实用的解决小案例,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Android开发实现ImageView加载摄像头拍摄的大图功能

    Android开发实现ImageView加载摄像头拍摄的大图功能

    这篇文章主要介绍了Android开发实现ImageView加载摄像头拍摄的大图功能,涉及Android基于ImageView的摄像头拍摄图片加载、保存及权限控制等相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • Flutter路由框架Fluro使用教程详细讲解

    Flutter路由框架Fluro使用教程详细讲解

    在Flutter应用开发过程中,除了使用Flutter官方提供的路由外,还可以使用一些第三方路由框架来实现页面管理和导航,Fluro作为一款优秀的Flutter企业级路由框架,Fluro的使用比官方提供的路由框架要复杂一些,但是却非常适合中大型项目
    2022-10-10
  • Android App后台震动的实现步骤详解

    Android App后台震动的实现步骤详解

    这篇文章主要为大家介绍了Android App后台震动的实现步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Android自定义控件eBook实现翻书效果实例详解

    Android自定义控件eBook实现翻书效果实例详解

    这篇文章主要介绍了Android自定义控件eBook实现翻书效果的方法,结合实例形式分析了Android自定义控件实现翻书效果的具体步骤与相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • Android轻松实现多语言的方法示例

    Android轻松实现多语言的方法示例

    本篇文章主要介绍了Android轻松实现多语言的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Android自定义控件实现可左右滑动的导航条

    Android自定义控件实现可左右滑动的导航条

    这篇文章主要介绍了Android自定义控件实现可左右滑动的导航条,能响应快速滑动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07

最新评论