转到Apache HttpClient 4.3,如何使用摘要式身份验证获取遗留拦截器行为?

时间:2016-06-10 15:09:22

标签: android apache-httpclient-4.x androidhttpclient

我们的Android应用程序已使用Android捆绑的HttpClient多年。我们已经开发了大量代码来操纵与我们的服务器产品的交互。每次调用execute(post)时,HttpClient与服务器的交互都是这样的:

  1. 客户端向服务器发送HTTP POST。
  2. 服务器以401 Not Authorized响应,并提供摘要式身份验证质询。
  3. 客户端将HTTP POST重新发送到服务器,包括摘要式身份验证响应(我们在步骤1之前提供CredentialsProvider,因此身份验证响应由HttpClient自动生成)。
  4. 服务器接受授权并以200响应。对execute()的调用返回200响应,并返回200响应的正文。
  5. 我们遇到了a problem with the HTTP library that ships with Android on several devices。我们尝试move to Apache 4.3 in the Android app,但拦截器行为是不同的。传统上,请求拦截器会触发两次:在步骤1和步骤3.响应拦截器也将触发两次:在步骤2和步骤4.我们只需要它们用于步骤2和步骤3,但很容易获得拦截器在步骤1和4的早期退出。由于移动到HttpClient 4.3,请求拦截器只在第1步触发,当时我们不需要它。

    是否有可以恢复旧行为的配置选项?我们还尝试在我们自己的HttpClient 4.2副本中进行链接,但这种情况也不顺利。

    谢谢!

1 个答案:

答案 0 :(得分:2)

请求执行管道完全重新设计4.3主要是为透明响应缓存和内容解压缩提供更好的支持。从4.3请求身份验证的请求不再被重置,重新评估并从头开始重新连接。无法使用新的执行管道恢复旧行为。然而,可以使用(或者更确切地说是滥用)自定义AuthenticationStrategy以便在认证握手期间拦截请求执行。