iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >解决Java处理HTTP请求超时的问题
  • 154
分享到

解决Java处理HTTP请求超时的问题

2024-04-02 19:04:59 154人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

在发送POST或GET请求时,返回超时异常处理办法: 捕获 SocketTimeoutException | ConnectTimeoutException | Connectio

在发送POST或GET请求时,返回超时异常处理办法:

捕获 SocketTimeoutException | ConnectTimeoutException | ConnectionPoolTimeout 异常

三种异常说明:

SocketTimeoutException:是Java包下抛出的异常,这定义了Socket读数据的超时时间,即从server获取响应数据须要等待的时间;当读取或者接收Socket超时会抛出SocketTimeoutException。

ConnectTimeoutException:是Apache的HttpClient包抛出的超时异常,定义了通过网络与server建立连接的超时时间,Httpclient包中通过一个异步线程去创建与server的socket连接,这就是该socket连接的超时时;

当连接httpserver或者等待HttpConnectionManager管理的一个有效连接超时出错会抛出ConnectionTimeoutException。

ConnectionPoolTimeout:也是Apache的HttpClient包抛出的超时异常,定义了从 ConnectionManager 管理的连接池中取出连接的超时时间;出错会抛出 ConnectionPoolTimeoutException。

总结

SocketTimeoutException异常是一个通用的异常,无论是用原生的HTTP请求,还是用Apache下的HttpClient包,在抛出的异常中都需要捕获 SocketTimeoutException 异常。

例:


public static String doGet(String url, Object params, String contentType) {
 try {
 return HttpUtils.doGetSend(url, params, contentType);
 } catch (SocketTimeoutException | ConnectTimeoutException e) {
 e.printStackTrace();
 System.out.println("请求连接超时:" + e.getMessage());
 } catch (IOException e) {
 e.printStackTrace();
 System.out.println("请求异常,异常信息:" + e.getMessage());
 } catch (Exception e) {
 e.printStackTrace();
 }
 return null;
}

补充:java 发送http请求(连接超时处理)

业务背景:

项目跟第三方公司对接。

业务描述:

出于数据安全考虑,需要从服务器发送请求,来调用第三方公司提供的接口。但是该场景是销售类型,响应时间必须够快,那么就要设置响应的超时处理。

不然让客户看着圈圈在那里转半天,谁买?

项目架构

jdk1.7

spring4.2.9

详细内容:


CloseableHttpClient httpclient = HttpClients.createDefault();
try {
  
 HttpPost httpPost = new HttpPost(要访问的URL);
 //配置超时
 RequestConfig requestConfig = RequestConfig.custom()  
  .setConnectTimeout(5000).setConnectionRequestTimeout(5000)  
  .setSocketTimeout(5000).build();  
 httpPost.setConfig(requestConfig);
  
 //设置post请求参数
 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
 nvps.add(new BasicNameValuePair("attr1", 参数值1)); 
 nvps.add(new BasicNameValuePair("attr2", 参数值2));
 nvps.add(new BasicNameValuePair("attr3", 参数值3));
 …… 
 httpPost.setEntity(new UrlEncodedFORMEntity(nvps)); 
  
 //执行post请求
 CloseableHttpResponse response = httpclient.execute(httpPost);
  
 // 判断网络连接状态码是否正常(0--200都数正常)
      if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
        //获取响应实体
       responseMessage = EntityUtils.toString(response.getEntity(),"utf-8");
        System.out.println(responseMessage);
        if(responseMessage!=null && !"".equals(responseMessage)){
         String data = new String(AESUtil.decrypt(Base64.decode(responseMessage), key),"UTF-8");
         
      String msg = translate_PRE(data,trans_type,transNo);
      result.put("msg", msg);
        }
        
      }else{
       System.out.println("请求未成功响应: "+ response.getStatusLine());
      
      }
 
 } catch (ConnectTimeoutException e) {
 System.out.println(api_type+"请求超时");
  
 } catch (ClientProtocolException e) {
 System.out.println("请求失败");
 
 } catch (Exception e) {
 e.printStackTrace();
 
 } finally {
 //释放连接
 try {
       if(httpclient!=null){
       httpclient.close();
       }
      } catch (IOException e) {
     System.out.println(api_type+"连接无法关闭");
      }
 }
 .setConnectTimeout(5000).setConnectionRequestTimeout(5000)  
  .setSocketTimeout(5000).build();  
 httpPost.setConfig(requestConfig);
  
 //设置post请求参数
 List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
 nvps.add(new BasicNameValuePair("attr1", 参数值1)); 
 nvps.add(new BasicNameValuePair("attr2", 参数值2));
 nvps.add(new BasicNameValuePair("attr3", 参数值3));
 …… 
 httpPost.setEntity(new UrlEncodedFormEntity(nvps)); 
  
 //执行post请求
 CloseableHttpResponse response = httpclient.execute(httpPost);
  
 // 判断网络连接状态码是否正常(0--200都数正常)
      if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
        //获取响应实体
       responseMessage = EntityUtils.toString(response.getEntity(),"utf-8");
        System.out.println(responseMessage);
        if(responseMessage!=null && !"".equals(responseMessage)){
         String data = new String(AESUtil.decrypt(Base64.decode(responseMessage), key),"UTF-8");
         
      String msg = translate_PRE(data,trans_type,transNo);
      result.put("msg", msg);
        }
        
      }else{
       System.out.println("请求未成功响应: "+ response.getStatusLine());
      
      }
 
 } catch (ConnectTimeoutException e) {
 System.out.println(api_type+"请求超时");
  
 } catch (ClientProtocolException e) {
 System.out.println("请求失败");
 
 } catch (Exception e) {
 e.printStackTrace();
 
 } finally {
 //释放连接
 try {
       if(httpclient!=null){
       httpclient.close();
       }
      } catch (IOException e) {
     System.out.println(api_type+"连接无法关闭");
      }
 }
 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: 解决Java处理HTTP请求超时的问题

本文链接: https://www.lsjlt.com/news/122535.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解决Java处理HTTP请求超时的问题
    在发送POST或GET请求时,返回超时异常处理办法: 捕获 SocketTimeoutException | ConnectTimeoutException | Connectio...
    99+
    2024-04-02
  • Java中出现HTTP请求超时如何处理
    这篇文章给大家介绍Java中出现HTTP请求超时如何处理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在发送POST或GET请求时,返回超时异常处理办法:捕获 SocketTimeoutException | Conn...
    99+
    2023-06-14
  • 解决Shiro 处理ajax请求拦截登录超时的问题
    目录Shiro 处理ajax请求拦截登录超时配置全局ajax配置Shiro session超时页面跳转的处理问题描述ajax请求超时处理后端Filter代码前端通用ajax处理非aj...
    99+
    2024-04-02
  • 应该使用哪个状态码处理HTTP请求超时问题?
    在HTTP请求超时时,应该返回怎样的状态码? 当发起一个HTTP请求时,客户端会等待服务器响应,然后根据服务器返回的状态码进行相应的处理。然而,在某些情况下,服务器可能无法在规定的时间...
    99+
    2024-02-26
    http请求 状态码 超时
  • Nginx请求处理时间过长问题解决
    问题 项目的一个功能由于数据量过于庞大,服务器处理请求时间过长,导致超出Nginx配置的代理请求超时时间,其会报错404!时间在一分钟左右就会跳转Nginx错误页面。这里从Nginx端的配置来说如何解决这类问题! 解决方式 修改Nginx...
    99+
    2023-08-19
    nginx 服务器 运维
  • springboot如何实现异步响应请求(前端请求超时的问题解决)
    目录问题解决方案1.服务端异步处理2.设置响应时间需要避免踩到的坑1.关于dubbo中的设置2.关于tomcat的设置3.关于Nginx的设置总结问题 实际场景中会遇到请求业务处理流...
    99+
    2023-01-30
    springboot 异步响应请求 springboot异步请求处理 springboot异步接口响应
  • 解决vue $http的get和post请求跨域问题
    vue $http的get和post请求跨域问题 首先在config/index.js中配置proxyTable proxyTable: { '/api':{ ...
    99+
    2024-04-02
  • 如何处理Go语言中的并发网络请求超时问题?
    如何处理Go语言中的并发网络请求超时问题?在使用Go语言进行网络请求的过程中,经常会遇到并发请求的情况。而并发请求的一个关键问题就是如何处理超时。本文将介绍如何在Go语言中处理并发网络请求的超时问题,并提供具体的代码示例。在Go语言中,处理...
    99+
    2023-10-22
    并发处理 超时问题 网络请求
  • 如何处理Go语言中的并发网络请求超时问题
    在Go语言中处理并发网络请求超时问题,可以使用`context`包来实现。`context`包提供了一种在跨多个Goroutine传...
    99+
    2023-10-09
    Go语言
  • 解决Netty解码http请求获取URL乱码问题
    目录Netty解码http请求获取URL乱码解决方案原因Netty---编解码(原理) 1.ByteToMessageDecoder2.FixedLengthFrameDe...
    99+
    2024-04-02
  • python-requests请求超时解决方案
            python程序根据url从互联网上批量获取数据时,设置HTTP或Socket超时,来防止爬虫爬取某个页面时间过长,导致程序卡置不前。 1、socket 全局设置。 import socketsocket.setdefaul...
    99+
    2023-08-31
    python 爬虫 requests
  • java中http请求之restTemplate配置超时时间(亲测有用!)
    问题:http请求发起后接收不到返回数据!!!【测试环境没出问题,发到正式环境就有问题】 项目中通过restTemplate发起请求: log.info("请求入参:{}",JSON.toJSONString(reques...
    99+
    2023-09-06
    java http servlet
  • dubbo中zookeeper请求超时问题的示例分析
    这篇文章主要介绍dubbo中zookeeper请求超时问题的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!进入正题:先上我dao层配置:上db.properties配置。上S...
    99+
    2024-04-02
  • 面试官必问的问题:你如何使用 Python 处理 HTTP 请求?
    在现代 Web 开发中,HTTP 请求是不可或缺的一部分。Python 作为一种流行的编程语言,具有处理 HTTP 请求的能力。本文将探讨如何使用 Python 处理 HTTP 请求。 HTTP 请求 HTTP 请求由请求行、请求头和请求...
    99+
    2023-09-26
    接口 面试 http
  • Java使用GZIP压缩导致HTTP请求返回乱码问题解决
    目录原因思路解决方法代码关键部分完整代码原因 用Java调用雪球的API,结果返回的是乱码,一番研究后发现是因为返回的数据使用了GZIP压缩,需要先解压才能得到正确数据。 思路 使用...
    99+
    2024-04-02
  • SpringBoot @PostMapping接收HTTP请求的流数据问题怎么解决
    这篇文章主要讲解了“SpringBoot @PostMapping接收HTTP请求的流数据问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot ...
    99+
    2023-07-05
  • c#中post请求超时怎么解决
    在C#中,当遇到POST请求超时的问题时,可以尝试以下几种解决方案:1. 增加请求超时的时间限制:可以通过设置HttpWebRequ...
    99+
    2023-08-20
    c#
  • Java中怎么处理异步超时的问题
    这篇文章主要讲解了“Java中怎么处理异步超时的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中怎么处理异步超时的问题”吧!一天,我在改进多线程代码时被Future.get()卡...
    99+
    2023-06-17
  • java:接口请求超时的情况
    接口请求超时的原因 场景:我们提供的某个API接口,响应时间原本一直都很快,但在某个不经意的时间点,突然出现了接口超时。 1.网络异常 接口原本好好的,突然出现超时,最常见的原因,可能是网络出现异常了。比如:偶然的网络抖动,或者是带宽被占满...
    99+
    2023-08-21
    java 服务器 网络
  • php请求超时转态码怎么处理
    今天小编给大家分享一下php请求超时转态码怎么处理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。PHP请求超时状态码在PHP...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作