【问题标题】:Using jsoup getting java.net.SocketTimeoutException: Read timed out exception使用jsoup获取java.net.SocketTimeoutException:读取超时异常
【发布时间】:2020-01-06 04:30:57
【问题描述】:

使用jsoup获取java.net.SocketTimeoutException:读取超时异常

private static void getNiftyFutureOIReader() {
        String url = "https://www1.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuoteFO.jsp?underlying=NIFTY&instrument=FUTIDX&type=-&strike=-&expiry=30JAN2020";
        Document doc = null;
        try {
            doc = Jsoup.connect(url).timeout(15*1000).get();
            Element content = doc.getElementById("responseDiv");
            String jsonCont=content.html();
            System.out.println(jsonCont);

                } catch (IOException e) {
            e.printStackTrace();

        }

    }

我正在使用 Jsoup 调用网站 url 并读取其内容,使用 jsoup 获取 java.net.SocketTimeoutException: 读取超时异常

error log

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.security.ssl.InputRecord.readFully(Unknown Source)
    at sun.security.ssl.InputRecord.read(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
    at sun.security.ssl.AppInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:750)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:722)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:306)
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:295)
    at code.test.BankNiftyFutureOIReader.getNiftyFutureOIReader(BankNiftyFutureOIReader.java:19)
    at code.test.BankNiftyFutureOIReader.main(BankNiftyFutureOIReader.java:53)

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

    基于这个答案,JSoup UserAgent, how to set it right?,如果网站正在检查 UserAgent 或其他标头以验证您不是机器人,则可以尝试。我希望“实时报价”网页有这样的对策。

    Response response= Jsoup.connect("https://www1.nseindia.com/live_market/dynaContent/live_watch/get_quote/GetQuoteFO.jsp?underlying=NIFTY&instrument=FUTIDX&type=-&strike=-&expiry=30JAN2020")
           .ignoreContentType(true)
           .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")  
           .referrer("https://www.nseindia.com")   
           .timeout(15_000) 
           .followRedirects(true)
           .execute();
    // TODO: verify Response status code here!
    Document doc = response.parse();
    

    【讨论】:

      【解决方案2】:

      问题可能是由于

      1. 确保您已连接到互联网。尝试在浏览器中打开相同的 URL,看看它是否打开了页面。 或从您的 VM 能够访问该 url 简单的 curl / wget 方法

      2. 在获取文档之前指定更多的 Jsoup 连接超时,如下所示。

      参考:https://www.javacodeexamples.com/jsoup-sockettimeoutexception-read-timed-out-connect-timed-out-fix/775

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-29
        • 2011-07-13
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        相关资源
        最近更新 更多