Http请求长时间等待无结果返回解决办法
今天遇到一个奇葩的问题,这个程序主要是用于调用接口搜集数据的,但是,发生了不好的事情就是服务器中启动的进程非常多,一直无法结束,没办法只能采用kill的方法,将所有的这部分进程杀掉。
分析了下程序,写了个测试,本地跑依旧长时间等待,无法运行,也不抛出异常,最后发现问题在于发送请求的部分,一直在等待对方服务器响应,由于采用的是keep-alive方式的连接,这里没有采用超时的方式,以至于程序会长时间等待下去。
经过测试发现开启进程过多在于没有设置超时,希望读者注意这部分,否则,容易出现笔者遇到的这种问题。最终的问题应该是接口提供方的异常导致。
public static String sendPost(String url, String param) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setConnectTimeout(4000); conn.setReadTimeout(4000); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"); //e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ //ex.printStackTrace(); } } return result; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
在很多技术领域(如:自然语言处理,数据存储等),正则表达式可以很方便的提取...
本文实例为大家分享了ajax实现验证码功能的具体代码,供大家参考,具体内容如下 ...
最近,谷歌公布了这么一个消息。 制订一个更注重隐私的网站▼ 公告还挺长的,主...
废话不多说了,直接给大家贴代码了,具体代码如下所示: #include "stdio.h" #in...
复制代码 代码如下: var editor = FCKeditorAPI.GetInstance("content"); editor...
1.简要描述 腾讯短网址(url.cn短链接)生成api接口是腾讯官方对外公开的短网址...
戏说前文 不要想太多,直播和你(php)没啥关系、帮忙配置一下推拉流地址和Licen...
asp中使用实现字符串的连接 简单字符串连接 response.write "jb51.net""尊托云数...
题目描述 源代码 思路 遇到这种题教你们一个万能的思路 第一步先打印上半部分 第...
最近出的每日一题里面,有一道是关于合并同类型数据为一行的题,使用SQL Server ...