標籤:
使用Jsoup.connect(url).get()串連某網站時偶爾會出現
java.net.SocketTimeoutException:Read timed out異常。
原因是預設的Socket的延時比較短,而有些網站的響應速度比較慢,所以會發生逾時的情況。
解決方案:
連結的時候設定逾時時間即可。
doc = Jsoup.connect(url).timeout(5000).get();
5000表示延時時間設定為5s。
測試代碼如下:
1,不設定timeout時:
package jsoupTest; import java.io.IOException; import org.jsoup.*; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupTest { public static void main(String[] args) throws IOException{ String url = "http://www.weather.com.cn/weather/101010400.shtml"; long start = System.currentTimeMillis(); Document doc=null; try{ doc = Jsoup.connect(url).get(); } catch(Exception e){ e.printStackTrace(); } finally{ System.out.println("Time is:"+(System.currentTimeMillis()-start) + "ms"); } Elements elem = doc.getElementsByTag("Title"); System.out.println("Title is:" +elem.text()); } }
有時發生逾時:
java.net.SocketTimeoutException: Read timed out
2,設定了則一般不會逾時
package jsoupTest; import java.io.IOException; import org.jsoup.*; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class JsoupTest { public static void main(String[] args) throws IOException{ String url = "http://www.weather.com.cn/weather/101010400.shtml"; long start = System.currentTimeMillis(); Document doc=null; try{ doc = Jsoup.connect(url).timeout(5000).get(); } catch(Exception e){ e.printStackTrace(); } finally{ System.out.println("Time is:"+(System.currentTimeMillis()-start) + "ms"); } Elements elem = doc.getElementsByTag("Title"); System.out.println("Title is:" +elem.text()); } }
jsoup-提示java.net.SocketTimeoutException:Read timed out