jimu-decompiled/sources/okhttp3/logging/HttpLoggingInterceptor.java
2025-05-13 19:24:51 +02:00

217 lines
7.8 KiB
Java

package okhttp3.logging;
import java.io.EOFException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.concurrent.TimeUnit;
import okhttp3.Connection;
import okhttp3.Headers;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.internal.http.HttpHeaders;
import okhttp3.internal.platform.Platform;
import okio.Buffer;
import okio.BufferedSource;
/* loaded from: classes2.dex */
public final class HttpLoggingInterceptor implements Interceptor {
private static final Charset UTF8 = Charset.forName("UTF-8");
private volatile Level level;
private final Logger logger;
public enum Level {
NONE,
BASIC,
HEADERS,
BODY
}
public interface Logger {
public static final Logger DEFAULT = new Logger() { // from class: okhttp3.logging.HttpLoggingInterceptor.Logger.1
@Override // okhttp3.logging.HttpLoggingInterceptor.Logger
public void log(String str) {
Platform.get().log(4, str, null);
}
};
void log(String str);
}
public HttpLoggingInterceptor() {
this(Logger.DEFAULT);
}
private boolean bodyEncoded(Headers headers) {
String str = headers.get("Content-Encoding");
return (str == null || str.equalsIgnoreCase("identity")) ? false : true;
}
static boolean isPlaintext(Buffer buffer) {
try {
Buffer buffer2 = new Buffer();
buffer.copyTo(buffer2, 0L, buffer.size() < 64 ? buffer.size() : 64L);
for (int i = 0; i < 16; i++) {
if (buffer2.exhausted()) {
return true;
}
int readUtf8CodePoint = buffer2.readUtf8CodePoint();
if (Character.isISOControl(readUtf8CodePoint) && !Character.isWhitespace(readUtf8CodePoint)) {
return false;
}
}
return true;
} catch (EOFException unused) {
return false;
}
}
public Level getLevel() {
return this.level;
}
@Override // okhttp3.Interceptor
public Response intercept(Interceptor.Chain chain) throws IOException {
boolean z;
boolean z2;
Level level = this.level;
Request request = chain.request();
if (level == Level.NONE) {
return chain.proceed(request);
}
boolean z3 = level == Level.BODY;
boolean z4 = z3 || level == Level.HEADERS;
RequestBody body = request.body();
boolean z5 = body != null;
Connection connection = chain.connection();
String str = "--> " + request.method() + ' ' + request.url() + ' ' + (connection != null ? connection.protocol() : Protocol.HTTP_1_1);
if (!z4 && z5) {
str = str + " (" + body.contentLength() + "-byte body)";
}
this.logger.log(str);
if (z4) {
if (z5) {
if (body.contentType() != null) {
this.logger.log("Content-Type: " + body.contentType());
}
if (body.contentLength() != -1) {
this.logger.log("Content-Length: " + body.contentLength());
}
}
Headers headers = request.headers();
int size = headers.size();
int i = 0;
while (i < size) {
String name = headers.name(i);
int i2 = size;
if ("Content-Type".equalsIgnoreCase(name) || "Content-Length".equalsIgnoreCase(name)) {
z2 = z4;
} else {
z2 = z4;
this.logger.log(name + ": " + headers.value(i));
}
i++;
size = i2;
z4 = z2;
}
z = z4;
if (!z3 || !z5) {
this.logger.log("--> END " + request.method());
} else if (bodyEncoded(request.headers())) {
this.logger.log("--> END " + request.method() + " (encoded body omitted)");
} else {
Buffer buffer = new Buffer();
body.writeTo(buffer);
Charset charset = UTF8;
MediaType contentType = body.contentType();
if (contentType != null) {
charset = contentType.charset(UTF8);
}
this.logger.log("");
if (isPlaintext(buffer)) {
this.logger.log(buffer.readString(charset));
this.logger.log("--> END " + request.method() + " (" + body.contentLength() + "-byte body)");
} else {
this.logger.log("--> END " + request.method() + " (binary " + body.contentLength() + "-byte body omitted)");
}
}
} else {
z = z4;
}
long nanoTime = System.nanoTime();
try {
Response proceed = chain.proceed(request);
long millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - nanoTime);
ResponseBody body2 = proceed.body();
long contentLength = body2.contentLength();
String str2 = contentLength != -1 ? contentLength + "-byte" : "unknown-length";
Logger logger = this.logger;
StringBuilder sb = new StringBuilder();
sb.append("<-- ");
sb.append(proceed.code());
sb.append(' ');
sb.append(proceed.message());
sb.append(' ');
sb.append(proceed.request().url());
sb.append(" (");
sb.append(millis);
sb.append("ms");
sb.append(z ? "" : ", " + str2 + " body");
sb.append(')');
logger.log(sb.toString());
if (z) {
Headers headers2 = proceed.headers();
int size2 = headers2.size();
for (int i3 = 0; i3 < size2; i3++) {
this.logger.log(headers2.name(i3) + ": " + headers2.value(i3));
}
if (!z3 || !HttpHeaders.hasBody(proceed)) {
this.logger.log("<-- END HTTP");
} else if (bodyEncoded(proceed.headers())) {
this.logger.log("<-- END HTTP (encoded body omitted)");
} else {
BufferedSource source = body2.source();
source.request(Long.MAX_VALUE);
Buffer buffer2 = source.buffer();
Charset charset2 = UTF8;
MediaType contentType2 = body2.contentType();
if (contentType2 != null) {
charset2 = contentType2.charset(UTF8);
}
if (!isPlaintext(buffer2)) {
this.logger.log("");
this.logger.log("<-- END HTTP (binary " + buffer2.size() + "-byte body omitted)");
return proceed;
}
if (contentLength != 0) {
this.logger.log("");
this.logger.log(buffer2.clone().readString(charset2));
}
this.logger.log("<-- END HTTP (" + buffer2.size() + "-byte body)");
}
}
return proceed;
} catch (Exception e) {
this.logger.log("<-- HTTP FAILED: " + e);
throw e;
}
}
public HttpLoggingInterceptor setLevel(Level level) {
if (level == null) {
throw new NullPointerException("level == null. Use Level.NONE instead.");
}
this.level = level;
return this;
}
public HttpLoggingInterceptor(Logger logger) {
this.level = Level.NONE;
this.logger = logger;
}
}