在 Java 中检测损坏的 url (HTTP 404) 的最有效方法是什么?我想循环执行此操作并尽可能少地花费时间。
4 回答
您只能在请求 URL 后检测到 404:您将返回带有代码的标头(200 或 301 用于重定向,或 404 用于丢失文件),您可以检查它。
因此,您必须执行请求并等待可能的 404。
下面有一个相当不错的评论不应该被跳过,所以我在这里重复一遍: 可能的优化(在现有 URL 的情况下):使用 HEAD 请求而不是 GET。
破坏 URL 的方法有很多种:
- 语法无效
- 包含一个不存在的域
- 服务器无法访问
- 服务器不接受连接
- 服务器响应错误
除了第一个,所有这些都可能需要相对较长的时间(平均可能超过一秒),并且由于您正在与另一台计算机通信,因此无法加快速度。
您唯一能做的就是使用线程池并行检查多个 URL 。
您可以建立 URL 连接,通过捕获异常和检查 HTTP 状态代码来验证 URL 是否损坏。如果没有抛出异常并且 HTTP 状态为 200,则 URL 正常。
但要小心!有时 URL 已损坏,但应用程序返回状态为 200 的人类可读错误页面。例如,网站 www.somecompany.com 存在,但页面 www.somecompany.com/foo.html 不再存在。当您尝试到达那里时,您会收到消息“页面不存在”,但 HTTP 状态为 200。这可以通过仅解析页面内容来解决(有时)。
我编写了一个 Github 操作,可以通过在任何合并或更新之前测试所有链接来帮助持续集成。这个 gitHub 操作读取给定特定扩展输入的所有脚本,并提取所有链接并一一测试。该操作也可在 GitHub 市场上用于 GitHub 托管项目:
https://github.com/marketplace/actions/urls-checker
这些脚本在 python 中,因此您实际上只需很少的更改即可在本地使用它们:https ://github.com/SuperKogito/URLs-checker
如果您觉得这很有用,请随意对存储库进行分叉和加注星标;)