当前位置: 移动技术网 > IT编程>开发语言>Java > Http请求长时间等待无结果返回解决办法

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

2017年12月08日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网