Http requests a long wait for no result to return a solution
- 2021-12-21 04:39:35
- OfStack
Http requests a long wait for no result to return a solution
Today, I encountered a wonderful problem. This program is mainly used to call the interface to collect data. However, something bad happened is that there are many processes started in the server, and 1 can't be finished. I can't use kill to kill all this part of the process.
After analyzing the next program, I wrote a test. The local run still waits for a long time, can't run, and doesn't throw an exception. Finally, I found that the problem lies in sending the request. 1 is waiting for the response of the other server. Because the connection is keep-alive, there is no timeout here, so that the program will wait for a long time.
After testing, it is found that there are too many open processes because there is no timeout. I hope readers will pay attention to this part, otherwise, it is easy for the author to encounter this kind of problem. The final problem should be caused by an exception from the interface provider.
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// Open and URL Connection between
URLConnection conn = realUrl.openConnection();
// Setting Common Request Properties
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);
// Send POST The request must be set with the following two lines
conn.setDoOutput(true);
conn.setDoInput(true);
// Get URLConnection The output stream corresponding to the object
out = new PrintWriter(conn.getOutputStream());
// Send request parameters
out.print(param);
// flush Buffering of output stream
out.flush();
// Definition BufferedReader Input stream to read URL Response of
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println(" Send POST Exception in request! ");
//e.printStackTrace();
}
// Use finally Block to close the output stream, the input stream
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
//ex.printStackTrace();
}
}
return result;
}
Thank you for reading, hope to help everyone, thank you for your support to this site!