1
0
mirror of https://github.com/square/okhttp.git synced 2025-08-08 23:42:08 +03:00

Log gzip request body size (#7013)

This commit is contained in:
Yuri Schimke
2022-01-17 08:15:43 +00:00
committed by GitHub
parent 14218871df
commit b97eeacaa3
3 changed files with 94 additions and 8 deletions

View File

@@ -199,18 +199,30 @@ class HttpLoggingInterceptor @JvmOverloads constructor(
} else if (requestBody.isOneShot()) {
logger.log("--> END ${request.method} (one-shot body omitted)")
} else {
val buffer = Buffer()
var buffer = Buffer()
requestBody.writeTo(buffer)
var gzippedLength: Long? = null
if ("gzip".equals(headers["Content-Encoding"], ignoreCase = true)) {
gzippedLength = buffer.size
GzipSource(buffer).use { gzippedResponseBody ->
buffer = Buffer()
buffer.writeAll(gzippedResponseBody)
}
}
val charset: Charset = requestBody.contentType().charset()
logger.log("")
if (buffer.isProbablyUtf8()) {
if (!buffer.isProbablyUtf8()) {
logger.log(
"--> END ${request.method} (binary ${requestBody.contentLength()}-byte body omitted)"
)
} else if (gzippedLength != null) {
logger.log("--> END ${request.method} (${buffer.size}-byte, $gzippedLength-gzipped-byte body)")
} else {
logger.log(buffer.readString(charset))
logger.log("--> END ${request.method} (${requestBody.contentLength()}-byte body)")
} else {
logger.log(
"--> END ${request.method} (binary ${requestBody.contentLength()}-byte body omitted)")
}
}
}

View File

@@ -22,12 +22,13 @@ import java.util.List;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
import javax.net.ssl.HostnameVerifier;
import mockwebserver3.MockResponse;
import mockwebserver3.MockWebServer;
import mockwebserver3.junit5.internal.MockWebServerExtension;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.testing.PlatformRule;
import okhttp3.Protocol;
import okhttp3.RecordingHostnameVerifier;
import okhttp3.Request;
@@ -35,8 +36,7 @@ import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor.Level;
import mockwebserver3.MockResponse;
import mockwebserver3.MockWebServer;
import okhttp3.testing.PlatformRule;
import okhttp3.tls.HandshakeCertificates;
import okio.Buffer;
import okio.BufferedSink;
@@ -46,6 +46,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.RegisterExtension;
import static okhttp3.RequestBody.gzip;
import static okhttp3.tls.internal.TlsUtil.localhost;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.fail;
@@ -580,6 +581,42 @@ public final class HttpLoggingInterceptorTest {
.assertNoMoreLogs();
}
@Test public void bodyRequestGzipEncoded() throws IOException {
setLevel(Level.BODY);
server.enqueue(new MockResponse()
.setHeader("Content-Type", PLAIN)
.setBody(new Buffer().writeUtf8("Uncompressed")));
Response response = client.newCall(request()
.addHeader("Content-Encoding", "gzip")
.post(gzip(RequestBody.create("Uncompressed", null)))
.build()).execute();
ResponseBody responseBody = response.body();
assertThat(responseBody.string()).overridingErrorMessage(
"Expected response body to be valid").isEqualTo("Uncompressed");
responseBody.close();
networkLogs
.assertLogEqual("--> POST " + url + " http/1.1")
.assertLogEqual("Content-Encoding: gzip")
.assertLogEqual("Transfer-Encoding: chunked")
.assertLogEqual("Host: " + host)
.assertLogEqual("Connection: Keep-Alive")
.assertLogEqual("Accept-Encoding: gzip")
.assertLogMatch("User-Agent: okhttp/.+")
.assertLogEqual("")
.assertLogEqual("--> END POST (12-byte, 32-gzipped-byte body)")
.assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
.assertLogEqual("Content-Type: text/plain; charset=utf-8")
.assertLogMatch("Content-Length: \\d+")
.assertLogEqual("")
.assertLogEqual("Uncompressed")
.assertLogEqual("<-- END HTTP (12-byte body)")
.assertNoMoreLogs();
}
@Test public void bodyResponseGzipEncoded() throws IOException {
setLevel(Level.BODY);