0

我们正在学习使用 JSOUP 和 urlconnection,因此我们正在从我们选择的网站解析页面并解析页面以回答有趣的问题。

一切正常,但是我时不时地得到一个 SocketTimeOutException。我认为这是因为网站断开了我的程序(或者让我超时,或者节流,或者其他什么)。

每次下载新页面时,我都实现了 0-30 秒之间的随机睡眠。我认为它有帮助,但它仍然会发生。因此,现在我尝试捕获异常并休眠 15 分钟,然后再递归尝试。

有没有更好的方法来处理这个?这是我得到例外的原因吗?

另外,每隔几分钟以某种方式更改 IP 是否会有所帮助(这在 Java 中是否可行)?谢谢

4

1 回答 1

1

一切正常,但是我时不时地得到一个SocketTimeOutException. 我认为这是因为网站断开了我的程序(或者让我超时,或者节流,或者其他什么)。

预计HTTP 连接失败。这就是协议的本质。这可能有很多原因(您的 newtork 不稳定,他们的网络不稳定,他们的防火墙认为您正在攻击他们并阻止,您的防火墙认为您受到攻击并阻止)。

每次下载新页面时,我都实现了 0-30 秒之间的随机睡眠。我认为它有帮助,但它仍然会发生。因此,现在我尝试捕获异常并休眠 15 分钟,然后再递归尝试。

每次成功获取页面或每次出现错误然后重试时,我都会睡觉。不过,我不会等这么久(15 分钟?),我会为两者都做 1 分钟。

有没有更好的方法来处理这个?这是我得到例外的原因吗?

如前所述,由于网络,您会遇到异常。您对此无能为力,这是正常的网络行为。

另外,每隔几分钟以某种方式更改 IP 是否会有所帮助(这在 Java 中是否可行)?

如果目标网站在n请求后进行某种日志记录并阻止 IP 地址,将会有所帮助。尽管如此,您仍然无法通过 Java 以您想要的方式更改它。IP 地址属于机器(而不是程序),并且大部分时间是由其他人分配的,而不是您。

您可以通过代理发出 HTTP 请求,然后它们的 IP 地址将到达目标服务器(当一个代理被禁止时您将更改代理),但这会使您的连接更加不稳定,因为您正在添加一个“交易”层。

于 2013-05-25T20:02:05.627 回答