如何检查OkHttp3请求是否超时



我正在使用以下代码向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文档,如果由于取消、连接问题或超时而无法执行请求,okhttp3 execute调用将抛出IOException。

投掷:IOException-如果请求由于取消、连接问题或超时而无法执行。由于网络在交换过程中可能会出现故障,因此远程服务器可能在故障之前接受了请求。

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

虽然我在okHttp3文档中找不到任何关于超时异常的信息,但查看这里的测试可以发现,在超时的情况下会引发SocketTimeoutException异常。

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

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

相关内容

  • 没有找到相关文章

最新更新