评论

收藏

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

开发技术 开发技术 发布于:2021-10-20 18:36 | 阅读数:282 | 评论:0

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;
  }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

关注下面的标签,发现更多相似文章