一切正常,但是我时不时地得到一个SocketTimeOutException
. 我认为这是因为网站断开了我的程序(或者让我超时,或者节流,或者其他什么)。
预计HTTP 连接失败。这就是协议的本质。这可能有很多原因(您的 newtork 不稳定,他们的网络不稳定,他们的防火墙认为您正在攻击他们并阻止,您的防火墙认为您受到攻击并阻止)。
每次下载新页面时,我都实现了 0-30 秒之间的随机睡眠。我认为它有帮助,但它仍然会发生。因此,现在我尝试捕获异常并休眠 15 分钟,然后再递归尝试。
每次成功获取页面或每次出现错误然后重试时,我都会睡觉。不过,我不会等这么久(15 分钟?),我会为两者都做 1 分钟。
有没有更好的方法来处理这个?这是我得到例外的原因吗?
如前所述,由于网络,您会遇到异常。您对此无能为力,这是正常的网络行为。
另外,每隔几分钟以某种方式更改 IP 是否会有所帮助(这在 Java 中是否可行)?
如果目标网站在n
请求后进行某种日志记录并阻止 IP 地址,将会有所帮助。尽管如此,您仍然无法通过 Java 以您想要的方式更改它。IP 地址属于机器(而不是程序),并且大部分时间是由其他人分配的,而不是您。
您可以通过代理发出 HTTP 请求,然后它们的 IP 地址将到达目标服务器(当一个代理被禁止时您将更改代理),但这会使您的连接更加不稳定,因为您正在添加一个“交易”层。