在Java中有效地检测破坏的URL

时间:2011-01-26 09:51:50

标签: java url performance broken-links

在Java中检测损坏的URL(HTTP 404)的最有效方法是什么?我想循环这样做,尽可能少花时间。

4 个答案:

答案 0 :(得分:2)

您只能在请求URL后检测到404:您将获得带有代码的标题(200或301用于重定向,或404用于丢失文件),您可以检查它。

所以你必须做这个请求并等待可能的404。

下面有一个相当不错的评论不应该被跳过,所以我在这里重复一遍: 可能的优化(在现有网址的情况下):使用HEAD请求而不是GET。

答案 1 :(得分:1)

可以通过多种方式破解URL:

  • 语法无效
  • 包含不存在的域
  • 无法访问服务器
  • 服务器不接受连接
  • 服务器响应错误

除了第一个,所有这些都需要相当长的时间(平均可能超过一秒),并且由于您正在与另一台计算机通信,因此无法加快速度。

您唯一能做的就是使用thread pool并行检查多个网址。

答案 2 :(得分:0)

您可以通过捕获异常并检查HTTP状态代码来建立URL连接,以验证URL是否已损坏。如果未抛出异常且HTTP状态为200,则URL正常。

但要小心!有时URL被破坏但应用程序返回状态为200的人类可读错误页面。 例如网站www.somecompany.com存在,但页面www.somecompany.com/foo.html不再存在。当您尝试到达那里时,您会收到消息“页面不存在”但HTTP状态为200.这可以通过仅解析页面内容来解决(有时)。

答案 3 :(得分:0)

我写了一个Github动作,可以通过在合并或更新之前测试所有链接来帮助进行持续集成。 gitHub操作读取给定扩展名输入的所有脚本,提取所有链接并逐个测试它们。该操作也可以在GitHub市场上使用,以在GitHub托管项目中使用:

https://github.com/marketplace/actions/urls-checker

脚本在python中,因此实际上您只需很少的更改就可以在本地使用它们:https://github.com/SuperKogito/URLs-checker

如果发现有用的话,请随意拨叉并加注星标;)