自动重试401并使用HttpClient 4.3发送特定请求

时间:2014-06-04 08:19:44

标签: java authorization httpclient apache-httpclient-4.x

我在应用程序中使用特定的身份验证机制。 要登录应用程序,请将登录请求发送到特定的URL / login /,并获取存储在cookie中的会话令牌。

任何时候令牌都可以被服务器无效,其他请求将导致401.我希望HttpClient自动检测401错误,重做/登录/请求一次并自动重试原始请求。

我已经尝试在HttpClients.custom()。setRetryHandler中设置HttpRequestRetryHandler,但它似乎无法处理401错误。

执行所请求功能的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

您可以根据需要使用OkHttpClient。它实现了你想要的。

处理身份验证。 OkHttp can automatically retry unauthenticated requests. When a response is 401 Not Authorized, an Authenticator is asked to supply credentials. Implementations should build a new request that includes the missing credentials. If no credentials are available, return null to skip the retry.

您可以阅读有关库here的更多信息。

答案 1 :(得分:0)

显然最简单的方法是在HttpClient上编写一个代理类来捕获"执行"方法结果,如果需要Auth,则执行自定义请求并使用原始参数重新调用原始方法。