在 Java 中有效检测损坏的 url

发布于 2024-10-14 05:02:38 字数 66 浏览 7 评论 0 原文

在 Java 中检测损坏的 url (HTTP 404) 最有效的方法是什么?我想循环执行此操作并花费尽可能少的时间。

What's the most efficient way to detect a broken url (HTTP 404) in Java? I'd like to do this in a loop and take as little time as possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

尛丟丟 2024-10-21 05:02:39

您只能在请求 URL 后检测到 404:您将收到带有代码的标头(200 或 301 表示重定向,或 404 表示丢失文件),您可以进行检查。

所以你必须执行请求并等待可能的 404。

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

You can only detect a 404 after you've requested the URL: you'll get a header back with the code (200, or 301 for redirect, or 404 for missing file), and you can check that.

So you'll have to do the request and wait for a possible 404.

There's a rather good comment below that should not be skipped, so I'm repeating it here:
Possible optimization (in the case of existing URLs): use a HEAD request instead of a GET.

寒冷纷飞旳雪 2024-10-21 05:02:39

破坏 URL 的方式有很多种:

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

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

您唯一能做的就是使用 线程池

There are many different ways in which an URL can be broken:

  • Syntactically invalid
  • Contains a non-existing domain
  • Server is not reachable
  • Server does not accept connections
  • Server responds with an error

Except for the first, all of these can take a relatively long time (probably well over a second on average), and there is no way to speed it up since you're communicating with another computer.

The only thing you can do is to check many URLs in parallel using a thread pool.

泛滥成性 2024-10-21 05:02:39

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

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

You can establish URL connection verify that URL is broken by catching exception and checking the HTTP status code. If exception is not thrown and HTTP status is 200 URL is OK.

But be carefull! Sometimes URL is broken but the application returns human readable error page with status 200.
For example site www.somecompany.com exists but page www.somecompany.com/foo.html does not exist any more. When you try to get there you get message "page does not exist" but the HTTP status is 200. This can be solved (sometimes) by parsing the page content only.

时光礼记 2024-10-21 05:02:39

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

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

这些脚本采用 python 编写,因此您只需进行很少的更改即可在本地使用它们: https://github.com/SuperKogito/URLs-checker

如果您发现这有用,请随意分叉并给存储库加注星标;)

I wrote a Github action that can help with continuous integration by testing all links before any merge or update. This gitHub action reads all the scripts given certain extensions input and extract all the links and test them one by one. The action is also available on GitHub marketplace to use in GitHub hosted projects:

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

The scripts are in python so you can actually with very little changes use them locally: https://github.com/SuperKogito/URLs-checker

Feel free to fork and star the repository if you find this useful ;)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文