IOException缺少详细信息 - 403错误

时间:2012-06-15 14:15:35

标签: java web-crawler ioexception

事情是:我有一个webcrawler框架,以及实现此框架的独立模块。所有这些模块都从新闻特定网站捕获新闻。

在框架中有2个不可预测的错误:IOException和SocketTimeoutException。出于显而易见的原因(网站可能处于脱机状态,和/或处于维护状态)

事情是:在特定网站(THIS one)中,我始终获得随机IOExceptions。我试过预测它,但我仍然不知道为什么我会收到这个错误。

我认为这是因为在测试阶段对请求进行轰炸。事实并非如此,因为在2或3天内没有发送另一个请购单,它仍然会引发错误。

简而言之:该网站不需要身份验证,随机抛出403. RANDOMLY

由于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

7 个答案:

答案 0 :(得分:3)

服务器可能随心所欲地返回403。除了尊重服务器不希望您进入的意愿之外,您不应该在此结束时解决此问题。您可以尝试阅读响应正文以获取服务器提供的详细信息,但这可能是您所有的#39;我会得到。我相信你正在寻找的403. n 错误代码是一个 IIS 特定功能,你指出的网站似乎是用 nginx < / strong>,所以不要期望得到那些。

如果您的webcrawler 随机获得403但是常规网络浏览器(来自相同的IP)永远不会获得403,那么我建议的最好是让您制作您的webcrawler请求标题看起来像完全,就像常规Web浏览器发送的那样。对于礼貌的网络浏览者来说,这是否是正确的行为是一个不同的讨论。

答案 1 :(得分:1)

在设计网络抓取工具时,应考虑意外中断和错误代码。

保留上次失败的网站队列,以便在一段时间后,网络抓取工具可以重试请求。

答案 2 :(得分:0)

问题可能是,您可以访问一个文件夹,您的程序想要读取站点上的所有文件,但是Web服务器会出现403错误,并且可能会终止套接字。 这就是我的想法,没有代码,我不能告诉它一个程序错误或只是网络服务器的配置。

答案 3 :(得分:0)

这可能是网站上的错误互联网连接,它可能有代码试图阻止蜘蛛。可能会有一个奇怪的代理服务器。

答案 4 :(得分:0)

也许尝试将index.php添加到最后(或者该网站的主要主页是什么.. index.html等。)

我不确定这是否有助于解决您的问题。我使用的是我在某个地方发现的Connection类,它基本上表示上面的帖子之一(模拟Web浏览器的标题,所以说......它看起来像是来自FireFox,而不是java默认的)是)。

我想这值得一试。

答案 5 :(得分:0)

要捎带其他人说过的话,您的抓取工具是否可能被识别并被视为网络扫描程序或渗透工具?

答案 6 :(得分:0)

我不知道Jsoup是什么,但我建议你阅读HttpURLConnection.getErrorStream()。此方法将允许您读取错误文档。在连接失败后也应该可以访问错误文档的标题字段,这通常是访问标题字段的方式。这两个(正文和标题)将一起为您提供服务器提供的所有信息。