java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:525)
at java.net.Socket.connect(Socket.java:475)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
以上是错误异常
public static StringBuffer getContent(URL url,String charset)
{
        StringBuffer contentBuffer = new StringBuffer();
        
try {
//打开链接
HttpURLConnection con = (HttpURLConnection)url.openConnection();
//设置代理
con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");//IE代理进行下载 //获得网页返回信息码
int responseCode = con.getResponseCode();//这一行提示出错,可是抓取其他网页内容的时候正常,只是有时会发生。
if (responseCode >= 400) //请求失败
{
System.out.println("请求失败:get response code: "+ responseCode);
return null;
}
//获取内容
            InputStream inStr = con.getInputStream();
InputStreamReader istreamReader = new InputStreamReader(inStr,charset);
BufferedReader buffStr = new BufferedReader(istreamReader);

String str = null;
        while((str = buffStr.readLine())!=null)
         contentBuffer.append(str);
        inStr.close();
        con.disconnect();
        } catch (IOException e) {
         e.printStackTrace();
        } finally{
         return contentBuffer;
        }
}

解决方案 »

  1.   


    int responseCode = -1;
    for(int i=0;i<3;i++){
    try{
    responseCode = con.getResponseCode();//这一行提示出错,可是抓取其他网页内容的时候正常
    }catch(ConnectException e){
     //TODO
    }
    }
    if(responseCode==-1){
      log.error("连接超时");
    //TODO
    }
      

  2.   


    这里的for循环是出现超时三次不再请求?如果出现异常捕获后不会跳出循环吗