java - OkHttp:与 http://example.com/的连接被泄露。您是否忘记关闭响应主体?

标签 java okhttp

OkHttp v3.4.1 的这个错误消息已经讨论过几次了,每次我读到它时,人们都没有关闭响应正文:

  WARNING: A connection to http://www.example.com/ was leaked. Did you forget to close a response body?

但是我的代码是这样的:

  private String executeRequest(Request request) throws IOException {
    Response response = httpClient.newCall(request).execute();

    try (ResponseBody responseBody = response.body()) {
      String string = responseBody.string();
      logger.debug("Result: {}", string);
      return string;
    }
  }

因此 responseBody.close() 总是被调用。 我为什么会收到上述错误?我配置了自定义 JWT 拦截器,但我不知道它如何导致问题:

public class JwtInterceptor implements Interceptor {

  private String jwt;

  @Override
  public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();

    if (jwt != null) {
      request = request.newBuilder()
          .addHeader("Authorization", "Bearer " + jwt)
          .build();
    }

    Response response = chain.proceed(request);
    String jwt = response.header("jwt");
    if (jwt != null) {
      this.jwt = jwt;
    }

    return chain.proceed(request);
  }
}

最佳答案

原来我的拦截器被窃听了:

return chain.proceed(request);

应该是:

return response;

关于java - OkHttp:与 http://example.com/的连接被泄露。您是否忘记关闭响应主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40661172/

相关文章:

Android Retrofit 我有时会得到 ECONNRESET,我不知道为什么

java - Java 中的 Casting 是否有任何运行时成本?

java - Hibernate插入问题

java - Bitnami Tomcat Stack Maven 编译失败

thread-safety - OkHttpClent 是线程安全的吗?

android - 用于 retrofit 和最新版本 okhttp 的 build.gradle 依赖项

java - 如何使用 JMX 连接到在 EC2 上运行的 Java 实例

java - 程序需要一直循环直到键入键 "Q"/"q"

java - 如何使用 OkHttp 中止大文件上传?

java - OkHttpClient 异步请求的返回值