主頁 > 知識庫 > Http請求長時(shí)間等待無結(jié)果返回解決辦法

Http請求長時(shí)間等待無結(jié)果返回解決辦法

熱門標(biāo)簽:科大訊飛語音識別系統(tǒng) 團(tuán)購網(wǎng)站 電子圍欄 服務(wù)器配置 銀行業(yè)務(wù) Linux服務(wù)器 阿里云 Mysql連接數(shù)設(shè)置

Http請求長時(shí)間等待無結(jié)果返回解決辦法

今天遇到一個(gè)奇葩的問題,這個(gè)程序主要是用于調(diào)用接口搜集數(shù)據(jù)的,但是,發(fā)生了不好的事情就是服務(wù)器中啟動的進(jìn)程非常多,一直無法結(jié)束,沒辦法只能采用kill的方法,將所有的這部分進(jìn)程殺掉。

分析了下程序,寫了個(gè)測試,本地跑依舊長時(shí)間等待,無法運(yùn)行,也不拋出異常,最后發(fā)現(xiàn)問題在于發(fā)送請求的部分,一直在等待對方服務(wù)器響應(yīng),由于采用的是keep-alive方式的連接,這里沒有采用超時(shí)的方式,以至于程序會長時(shí)間等待下去。

經(jīng)過測試發(fā)現(xiàn)開啟進(jìn)程過多在于沒有設(shè)置超時(shí),希望讀者注意這部分,否則,容易出現(xiàn)筆者遇到的這種問題。最終的問題應(yīng)該是接口提供方的異常導(dǎo)致。

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();
        // 設(shè)置通用的請求屬性
        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);
        // 發(fā)送POST請求必須設(shè)置如下兩行
        conn.setDoOutput(true);
        conn.setDoInput(true);
        // 獲取URLConnection對象對應(yīng)的輸出流
        out = new PrintWriter(conn.getOutputStream());
        // 發(fā)送請求參數(shù)
        out.print(param);
        // flush輸出流的緩沖
        out.flush();
        // 定義BufferedReader輸入流來讀取URL的響應(yīng)
        in = new BufferedReader(
            new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = in.readLine()) != null) {
          result += line;
        }
      } catch (Exception e) {
        System.out.println("發(fā)送 POST 請求出現(xiàn)異常!");
        //e.printStackTrace();
      }
      //使用finally塊來關(guān)閉輸出流、輸入流
      finally{
        try{
          if(out!=null){
            out.close();
          }
          if(in!=null){
            in.close();
          }
        }
        catch(IOException ex){
          //ex.printStackTrace();
        }
      }
      return result;
    }

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

您可能感興趣的文章:
  • Node.js發(fā)送HTTP客戶端請求并顯示響應(yīng)結(jié)果的方法示例
  • 模擬HTTP請求實(shí)現(xiàn)網(wǎng)頁自動操作及數(shù)據(jù)采集的方法
  • java 中http請求為了防止亂碼解決方案
  • Java使用HttpClient實(shí)現(xiàn)Post請求實(shí)例
  • 微信小程序 http請求封裝詳解及實(shí)例代碼
  • Angular的$http的ajax的請求操作(推薦)
  • 完美解決node.js中使用https請求報(bào)CERT_UNTRUSTED的問題

標(biāo)簽:衡水 廣元 棗莊 萍鄉(xiāng) 衢州 江蘇 大理 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Http請求長時(shí)間等待無結(jié)果返回解決辦法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266