gpt4 book ai didi

android - 如何检查OkHttp3请求是否超时?

转载 作者:行者123 更新时间:2023-11-30 01:25:20 26 4
gpt4 key购买 nike

我正在使用以下代码向 Web 服务器发出 HTTP GET 请求:

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
Request request = new Request.Builder()
.url("http://publicobject.com/helloworld.txt")
.build();

Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

Headers responseHeaders = response.headers();
for (int i = 0; i < responseHeaders.size(); i++) {
System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
}

System.out.println(response.body().string());
}

根据 OkHttp document如下所示,如果请求由于取消、连接问题或超时而无法执行,okhttp3 执行调用将抛出 IOException。

Throws: IOException - if the request could not be executed due to cancellation, a connectivity problem or timeout. Because networks can fail during an exchange, it is possible that the remote server accepted the request before the failure.

我想知道是否有办法知道 IOException 是否是由于请求超时造成的?

最佳答案

虽然我在 okHttp3 文档中找不到任何关于超时异常的信息,但查看测试 here表明 SocketTimeoutException在超时的情况下将引发异常。

因此,为了回答我自己的问题,我们可以捕获 SocketTimeoutException首先是为了知道 IOException 是否是由于请求超时引起的,如下所示:

try {
// make http request
} catch (SocketTimeoutException e) {
// request timed out
} catch (IOException e) {
// some other error
}

关于android - 如何检查OkHttp3请求是否超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36493103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com