转向 Apache HttpClient 4.3,如何通过摘要身份验证获得遗留拦截器行为?

Moving to Apache HttpClient 4.3, how to get legacy interceptor behavior with digest authentication?

我们的 Android 应用程序多年来一直使用 Android 捆绑的 HttpClient。我们已经增加了相当多的代码来操纵与我们的服务器产品的交互。每次我们调用execute(post),HttpClient与服务器的交互是这样的:

  1. 客户端向服务器发送 HTTP POST。
  2. 服务器响应 401 未授权并提供摘要身份验证质询。
  3. 客户端向服务器重新发送 HTTP POST,包括摘要身份验证响应(我们在第 1 步之前提供了一个 CredentialsProvider,因此身份验证响应由 HttpClient 自动生成)。
  4. 服务器接受授权并响应 200。调用 execute() returns 200 响应和伴随 200 响应的正文。

我们已经 运行 进入 . We tried to ,但拦截器行为不同。传统上,请求拦截器会触发两次:第 1 步和第 3 步。响应拦截器也会触发两次:第 2 步和第 4 步。我们只在第 2 步和第 3 步需要它们,但很容易获得拦截器在第 1 步和第 4 步提前退出。自从迁移到 HttpClient 4.3 后,请求拦截器仅在我们不需要时在第 1 步触发。

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

谢谢!

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