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;
}
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:- Node.js發送HTTP客戶端請求并顯示響應結果的方法示例
- 模擬HTTP請求實現網頁自動操作及數據采集的方法
- java 中http請求為了防止亂碼解決方案
- Java使用HttpClient實現Post請求實例
- 微信小程序 http請求封裝詳解及實例代碼
- Angular的$http的ajax的請求操作(推薦)
- 完美解決node.js中使用https請求報CERT_UNTRUSTED的問題