虚位以待(AD)
虚位以待(AD)
首页 > 网络编程 > JSP编程 > Http请求长时间等待无结果返回解决办法

Http请求长时间等待无结果返回解决办法
类别:JSP编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了Http请求长时间等待无结果返回解决办法的相关资料,需要的朋友可以参考下

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

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

相关热词搜索: Http请求长时间等待无结果返回 Http请求长