Java HttpURLConnection超时和IO异常处理

yizhihongxing

Java中的HttpURLConnection是HTTP协议的实现,是进行HTTP通信的基础。在使用HttpURLConnection进行网络请求时,会遇到超时和IO异常等问题,需要进行相应的处理。本文将详细讲解如何处理HttpURLConnection超时和IO异常。

HttpURLConnection超时处理

超时类型

HttpURLConnection中的超时分为连接超时和读取超时。

  • 连接超时:指建立连接的超时时间。超过该时间无法建立连接,会抛出一个 java.net.SocketTimeoutException 异常。
  • 读取超时:指服务器返回数据超时时间。超过该时间会抛出一个 java.net.SocketTimeoutException 异常。

超时设置

HttpURLConnection中连接超时和读取超时的设置方法相同,可通过setConnectTimeout和setReadTimeout方法来进行设置。

HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setConnectTimeout(5000); // 设置连接超时时间为5s
connection.setReadTimeout(10000); // 设置读取超时时间为10s

示例说明

public static String request(String urlString) throws IOException {
    HttpURLConnection connection = null;
    String result = "";
    try {
        URL url = new URL(urlString);
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setConnectTimeout(5000); // 设置连接超时时间为5s
        connection.setReadTimeout(10000); // 设置读取超时时间为10s
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
                "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream inputStream = connection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(inputStream, StandardCharsets.UTF_8));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                result += line;
            }
            inputStream.close();
            bufferedReader.close();
        }
    } finally {
        if (connection != null) {
            connection.disconnect();
        }
    }
    return result;
}

上述示例中设置了连接超时时间为5s,读取超时时间为10s,当超出超时时间时会抛出SocketTimeoutException。

HttpURLConnection IO异常处理

当出现网络异常时,会抛出IOException。我们可以通过IOException的getMessage方法获取异常信息,然后根据异常信息进行处理。

示例说明

public static String request(String urlString) {
    HttpURLConnection connection = null;
    String result = "";
    try {
        URL url = new URL(urlString);
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " +
                "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
        if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream inputStream = connection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(inputStream, StandardCharsets.UTF_8));
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                result += line;
            }
            inputStream.close();
            bufferedReader.close();
        } else {
            // 处理HTTP异常,HTTP状态码不是200
        }
    } catch (IOException e) {
        // 处理IO异常
        System.out.println("IO异常:" + e.getMessage());
    } finally {
        if (connection != null) {
            connection.disconnect();
        }
    }
    return result;
}

上述示例中使用try-catch语句块进行异常捕获和处理。当出现IO异常时,通过e.getMessage()获取异常信息,进行处理。

总结:使用HttpURLConnection进行网络请求时,需要考虑超时和IO异常等问题,防止网络请求导致程序异常。通过设置连接超时时间和读取超时时间来解决超时问题,通过捕获IO异常并进行相应的处理来解决IO异常问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java HttpURLConnection超时和IO异常处理 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解SpringMVC 基础教程 简单入门实例

    《详解SpringMVC 基础教程》是一篇介绍SpringMVC框架的文章,本文将为读者提供完整攻略,以供参考和学习。 SpringMVC 简介 SpringMVC是基于MVC设计模式的Web框架,它能够帮助开发者快速地搭建Web应用,并提供了丰富的标签和注解,使得开发Web应用变得更加简单。其优点包括组件化、灵活性、可重用性等。 SpringMVC 基础教…

    Java 2023年5月16日
    00
  • Java循环队列与非循环队列的区别总结

    Java循环队列与非循环队列的区别总结 什么是队列? 队列是计算机科学中一种常见的抽象数据类型,它代表了一组可以按顺序访问的元素,遵循 “先进先出” (FIFO) 的原则,也就是最先进入队列的元素最先被处理和弹出。 非循环队列 非循环队列是最普通的队列,也是最容易实现的。非循环队列采用静态数组或动态数组来实现。队列的读取位置(front) 和写入位置(rea…

    Java 2023年5月26日
    00
  • Sprint Boot @Async使用方法详解

    Spring Boot的@Async注解 在Spring Boot中,@Async注解用于标记异步方法。使用@Async注解可以将方法标记为异步方法,并在调用这些方法时使用线程池来执行它们。本文将详细介绍@Async注解的作用和使用方法,并提供两个示例说明。 @Async注解作用 在Spring Boot中,@Async注解的作用是标记方法为异步方法。使用@…

    Java 2023年5月5日
    00
  • JSP页面的动态包含和静态包含示例及介绍

    下面我会详细讲解一下“JSP页面的动态包含和静态包含示例及介绍”的攻略。 什么是JSP页面的包含? JSP页可以通过 <%@ include file=”filename.jsp” %> 的方式,包含其他文件或JSP页面。这个操作叫做实现JSP页面的包含。根据包含JSP页面和被包含JSP页面的关系,包含又可以分为静态包含和动态包含。 静态包含 所…

    Java 2023年6月15日
    00
  • Java使用动态规划算法思想解决背包问题

    Java 使用动态规划算法思想解决背包问题 什么是动态规划算法 动态规划(Dynamic Programming)是一种解决多阶段决策问题的优化方法。它将问题分解为多个阶段,并针对每个阶段进行决策。每个阶段的决策将会影响后续的阶段,因此需要对每个阶段进行全局最优化的考虑,以确保最终的结果是最优的。 背包问题 背包问题(Knapsack Problem)是常见…

    Java 2023年5月19日
    00
  • Spring常用注解及http数据转换教程

    下面就为大家详细讲解“Spring常用注解及http数据转换教程”的完整攻略。 一、Spring常用注解 在Spring框架中,注解是一项非常重要的功能,在实际开发中,开发者经常会使用到Spring框架中的注解。下面列出Spring中常用的注解及其使用方法: 1. @Autowired @Autowired注解为Spring中的自动装配注解,作用是自动装配被…

    Java 2023年5月20日
    00
  • Java实现二分搜索树的示例代码

    下面我将详细讲解“Java实现二分搜索树的示例代码”的完整攻略。 什么是二分搜索树? 首先,我们需要明确什么是二分搜索树(BST)。 二分搜索树是一种二叉树,其中每个节点都有一个键值,且每个节点的键值都大于左子树中任意一个节点的键值,小于右子树中任意一个节点的键值。这种性质使得查找、插入、删除节点的操作都可以在时间复杂度为O(logN)的时间内完成,非常适合…

    Java 2023年5月23日
    00
  • Springboot几种任务的整合方法

    下面我将详细讲解 Spring Boot 几种任务的整合方法,包括 Spring Batch、Quartz 定时任务、异步任务以及调度任务的整合。 Spring Batch 任务整合 Spring Batch 是一个开源的、轻量级的、面向企业级的批量处理框架。Spring Batch 提供了企业批处理的基础设施,能够构建大规模、复杂的批处理应用。要将 Spr…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部