我们正在学习使用JSOUP和urlconnection,因此我们正在从我们选择的网站解析页面并解析页面以回答有趣的问题。
一切都运行良好,但是现在每次都得到一个SocketTimeOutException。我认为这是因为该网站断开了我的程序(或者说我的时间,或节流阀,或其他东西)。
每次下载新页面时,我都会在0-30秒之间实现随机休眠。我觉得它有帮助,但它仍然会发生。所以现在我尝试捕捉异常,并在递归再次尝试之前休眠15分钟。
有没有更好的方法来解决这个问题?这是我获得例外的原因吗?
另外,每隔几分钟就会以某种方式改变IP会有所帮助吗(这在Java中是否可行)? 感谢
答案 0 :(得分:1)
一切都运作良好,但是现在我得到一个
SocketTimeOutException
。我认为这是因为该网站断开了我的程序(或者说我的时间,或节流阀,或其他东西)。
HTTP中的连接失败预期。这是协议的本质。可能有很多原因(你的newtork不稳定,他们的网络不稳定,他们的防火墙认为你正在攻击它们并阻塞,你的防火墙认为你受到了攻击并阻塞)。
每次下载新页面时,我都会在0-30秒之间实现随机休眠。我觉得它有帮助,但它仍然会发生。所以现在我尝试捕捉异常,并在递归再次尝试之前休眠15分钟。
每次成功获取页面或每次出现错误时我都会睡觉,然后重试。我不会等待这么多(15分钟?),我会为它们做1分钟。
有没有更好的方法来解决这个问题?这是我获得例外的原因吗?
如上所述,由于网络原因,您会收到异常。你无能为力,这是正常的网络行为。
另外,每隔几分钟就会以某种方式改变IP会有所帮助吗(这在Java中是否可行)?
如果目标网站执行某种日志记录并在n
请求后阻止IP地址,将会有所帮助。但是,你无法通过Java以你想要的方式改变它。 IP地址属于机器(不是程序),大部分时间是由其他人分配的,而不是你。
您可以通过代理发出HTTP请求,然后他们的IP地址就会到达目标服务器(当您被禁止时,您将更改代理),但这会使您的连接更加不稳定,因为您是在“交易”上再添加一层。