问题是:我有一个WebCrawler框架,以及实现该框架的独立模块。所有这些模块均捕获来自新闻特定网站的新闻。
在框架中,有2个不可预测的错误:IOException和SocketTimeoutException。出于明显的原因(网站可能处于离线状态和/或正在维护中)
问题是:在特定的网站(THIS one)中,我始终会得到随机的IOExceptions。我尝试进行预测,但是我仍然不知道为什么会收到此错误。
我认为这是在测试阶段用请求轰炸它造成的。并非如此,因为在2或3天内没有发送其他请购单,它仍然向我抛出错误。
简而言之:该站点不需要身份验证,它会随机抛出403。
由于403可能是多个不同的错误,所以我想看看我的应用程序有什么具体问题。
如果我能得到它的403,我可以尝试解决它。 (403.1、403.2,...,403.n)
//If you guys want the code, it's a basic Jsoup get.
//(I have also tried it with native API,
//and still get the same random 403 errors)
//Note that I also tried it with no redirection, and still get the error
Document doc = Jsoup
.connect("http://www.agoramt.com.br/")
.timeout(60000)
.followRedirects(true)
.get();
//You may criticize about the code. But this specific line is the one
//that throws the error. And it doesn't randomly do that to other 3k
//site connections. That's why I want to get the specifics from the 403
最佳答案
服务器可能一时兴起返回403。除了尊重服务器不要让您进入的愿望之外,您不应最终解决此问题。您可以尝试阅读响应正文以获取服务器提供的详细信息,但这可能就足够了。我认为您要查找的403.n错误代码是IIS特定功能,并且您指出的站点似乎正在与nginx一起提供,因此不要指望得到这些。
如果您的网络爬虫随机获得403,但是常规的网络浏览器(来自相同IP)却从未获得403,那么我建议的最好方法是使您的网络爬虫请求标头看上去与常规的网络浏览器发送的完全相同。对于礼貌的网络爬虫来说,这是否是正确的行为是另外一个讨论。