使用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()); } }