【问题标题】:OkHttp: A connection to http://example.com/ was leaked. Did you forget to close a response body?OkHttp:与 http://example.com/ 的连接被泄露。您是否忘记关闭响应正文?
【发布时间】:2016-11-17 17:17:42
【问题描述】:

这个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);
  }
}

【问题讨论】:

标签: java okhttp3


【解决方案1】:

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

return chain.proceed(request);

应该是:

return response;

【讨论】:

  • 期望 Response 作为返回类型。它是如何工作的?公共响应拦截(链链)抛出 IOException {
  • 谢谢@chetan.sankhala,应该是return response。我更新了答案。
【解决方案2】:

我们可以在 Kotlin 中使用这种方式

try {
                val req: Request = Request.Builder().url(url).get().build()
                val client = OkHttpClient()
                val resp: Response = client.newCall(req).execute()
                val code: Int = resp.code() // can be any value
                body= resp.body()
                if (code == 200) {
                    body?.close() // I close it explicitly
                }

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2022-11-09
    • 2014-09-27
    • 2015-03-23
    相关资源
    最近更新 更多