217 lines
7.8 KiB
Java
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;
|
|
}
|
|
}
|