OkHttp本身并不直接支持Digest认证,可以通过拦截器(Interceptor)来手动实现Digest认证的逻辑。
1、自定义Digest认证拦截器
@Slf4j
public class DigestAuthInterceptor implements Interceptor {
@NotNull
@Override
@SneakyThrows
public Response intercept(@NotNull Chain chain) {
Request original = chain.request();
String ha1 = calculateHA1(USERNAME, REALM, PASSWORD);
String method = original.method();
String url = original.url().toString();
String ha2 = calculateHA2(method, url);
String nonce = generateNonce();
String cNonce = generateNonce();
String response = calculateResponse(ha1, nonce, NONCE_COUNT, cNonce, QOP, ha2);
//构建Authorization头信息
String authHeader = "Digest username=\"" + USERNAME + "\",realm=\"" + REALM + "\",nonce=\"" + no