首页 > 编程 > JSP > 正文

Http请求长时间等待无结果返回解决办法

2020-07-27 21:23:42
字体:
来源:转载
供稿:网友

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;    }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表