尝试从表中读取时出现java.net.SocketTimeoutException: Read timed out错误

6

我正在编写一个程序,它将从网站的表格中检索一个人的价格。该代码获取姓氏并在表格中搜索该姓名,然后返回价格(另一列)。每当我运行它时,我都会收到java.net.SocketTimeoutException:读取超时错误消息。

这是我用于查询网站的代码:

public String price(String lastName) throws IOException
{
    Document doc = Jsoup.connect(url).get();

    Elements rows = doc.getElementsByTag("tr");;

    for(Element row : rows)
    {
        Elements columns = row.getElementsByTag("td");
        String lastName = columns.get(0).text();
        String price = columns.get(2).text();
        if(lastName.equalsIgnoreCase(name))
        {
            return price;
        }
    }
    return null;
}

你的读取超时时间太短了。请将其增加。 - user207421
@EJP 有关于如何做到那一点的建议吗?快速的谷歌搜索提供了“连接超时(int毫秒)”的建议,但我不确定在我的代码中应该放在哪里。 - AndyReifman
不,那是设置连接超时时间。我对JSoup一无所知,但Java中默认的套接字读取超时时间是无限的,因此某个人必须在JSoup中更改了它。 - user207421
那也是我的猜测。@martynas成功地提供了一个解决方案来响应你的建议。谢谢。 - AndyReifman
@EJP 来自 iManage user 的评论: "显然在 Jsoup 中,“Connection.timeout(int millis)”实际上设置了连接和读取的超时时间,根据文档:Connection timeout(int millis) 设置请求超时时间(连接和读取)。http://jsoup.org/apidocs/org/jsoup/Connection.html" - David Eisenstat
1个回答

11

试试这个:

Jsoup.connect(url).timeout(60*1000).get(); 

或者...

Jsoup.connect(url).timeout(0).get();

我猜测在删除实际 URL 后,"connect(url).get()" 是一个打字错误。如果代码这样写,它是不会编译的。 - Steinar
1
读取超时不是与连接相关的错误。只有在连接成功后才会发生这种情况。 - user207421
我在代码中不小心留下了一个多余的引号,现已进行了编辑并更新。 - AndyReifman
那看起来更有道理。 - user207421
没问题。请告诉我哪一个是有效的,这样我就可以更新我的答案。 - martynas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接