首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MockWebServer返回gzip响应

使用MockWebServer返回gzip响应
EN

Stack Overflow用户
提问于 2019-04-23 21:52:23
回答 1查看 893关注 0票数 3

我在为使用OkHttp的客户端编写包含gzipped响应的测试时遇到了问题。从本质上讲,我所做的是:

代码语言:javascript
复制
@Test
public void okHttp_whenResponseIsGzipped_returnsBody() throws Exception {
    MockWebServer mockWebServer = new MockWebServer();
    mockWebServer.start();

    mockWebServer.enqueue(new MockResponse()
            .addHeader("Content-Encoding", "gzip")
            .setBody(new String(compress("I AM BODY"))));

    OkHttpClient okHttpClient = new OkHttpClient();
    Request request = new Request.Builder().url(mockWebServer.url("")).build();
    Response response = okHttpClient.newCall(request).execute();

    assertThat(response.body().string(), equalTo("I AM BODY"));
}

public static byte[] compress(String data) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length());
    GZIPOutputStream gzip = new GZIPOutputStream(bos);
    gzip.write(data.getBytes());
    gzip.close();
    byte[] compressed = bos.toByteArray();
    bos.close();
    return compressed;
}

但是,当我运行这个测试时,它在调用response.body().string()时爆炸:

代码语言:javascript
复制
java.io.IOException: ID1ID2: actual 0x00001fef != expected 0x00001f8b

at okio.GzipSource.checkEqual(GzipSource.java:205)
at okio.GzipSource.consumeHeader(GzipSource.java:120)
at okio.GzipSource.read(GzipSource.java:73)
at okio.RealBufferedSource.request(RealBufferedSource.java:68)
at okio.RealBufferedSource.rangeEquals(RealBufferedSource.java:417)
at okio.RealBufferedSource.rangeEquals(RealBufferedSource.java:401)
at okhttp3.internal.Util.bomAwareCharset(Util.java:471)
at okhttp3.ResponseBody.string(ResponseBody.java:175)

我压缩响应正文的方式有问题吗?我需要做更多的工作来设置MockWebServer吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 08:16:20

不要执行new String(body),因为这会将其转换为字符串。取而代之的是new Buffer().write(body),它不会进行转换。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55812844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档