首页 > 解决方案 > OkHttp3 newCall.execute() 导致挂起。HttpUrlConnection 代码工作正常

问题描述

我的问题是以下语句导致退出程序挂起至少 30 秒。

OkHttpClient client = new OkHttpClient.Builder().build();
...
Request request = new Request.Builder()
                .method("POST", RequestBody.create(mediaType, ""))
                .url(myURL)
                .addHeader("Content-Type", "application/json").build();
...
try (Response response = client.newCall(request).execute()) //! Causes hang for some reason
        {
            resBody = response.body().string();
        }

这个方法通过了,我得到了成功的响应。但是当程序到达最后一条语句时,它会多挂起大约 30 秒。

如果我切换到使用 HttpUrlConnection 代码,则不会出现任何问题。

我尝试使用 jstack 但不确定我在看什么。你也不能用jstack“尾随”。OkHttp3 lib 的某些原因导致了这种情况。

如果您需要一些详细信息,我正在使用https mulesoft API。但是 Mulesoft 应用程序日志显示一个干净的请求和响应,没有错误。

有任何想法吗?

标签: javahttpurlconnectionokhttp

解决方案


https://github.com/square/okhttp/issues/5832 - 表示只需获取 OkHttp3 的最新库。


推荐阅读