#broken-links #dead-links-checker #dead-links #link-crawler

app link-walker

一个递归链接遍历工具,用于扫描网站上的断链

13 个版本

0.2.4 2023 年 3 月 6 日
0.2.3 2023 年 2 月 14 日
0.1.9 2023 年 2 月 4 日
0.1.7 2023 年 1 月 26 日

命令行工具 中排名第 873

每月下载量 48

MIT 许可证

27KB
514

Walker

Walker 是一个工具,通过对网站进行递归分析来搜索故障链接。它基于这样的假设:问题网站的首页链接到网站内的其他页面,这些页面随后又链接到更多页面。

值得注意的是,这个过程可能需要不确定的时间,因为一个网站可能包含无限数量的嵌套链接。递归函数的一个潜在的未来更新可能是添加一个 depth 参数,这将限制递归只到指定的层数。由于 CBSE 考试和大学申请,我暂时不计划实现这一点!

此外,walker 非常快。在获取网站中所有 URL 后,它将并行发送请求以快速验证它们是否损坏。我确实不确定如何修复一个 速率限制问题,但我相信最终我会找到解决办法。值得指出的是,walker 的唯一成本高昂的部分是获取 URL。这个过程既不是并发,也不是并行,因此需要一些时间。

特性

客户端渲染

由于此工具的实现通过获取指定网站的 HTML 来工作,因此它无法获取在客户端渲染的页面的 HTML。基本上,只分析您查看页面源代码时可以获得的 HTML。这通常包括静态生成或服务器端渲染的网站。

速率限制

由于我不在每次请求之间等待,一些网站可能会对 walker 实施速率限制策略,从而导致它对那些工作正常无误的 URL 错误。在这些情况下,如果 API 返回语义错误代码,walker 将显示类似于 429 Too Many Requests 的错误。

walker 在每个请求之间有 5 秒的超时时间。如果 URL 在 5 秒内没有返回响应,它将错误并显示操作已超时。

头部请求

为了节省字节,walker 执行 HEAD 请求而不是 GET 请求。但是,一些网站可能会拒绝对此方法的响应,这可能导致假阴性。在这些情况下,walker 将显示类似于 405 Method Not Allowed 的错误。

安装

要安装 walker,您需要在环境中配置 cargo。您可以在这里查看如何操作。完成后,运行

cargo install link-walker

...然后让它安装。一旦 link-walker 安装完成,您只需运行

link-walker -h

...即可获取关于如何使用此工具的信息。

用法

使用 walker 很简单。它有一个非常简单的命令行界面,可以用来直观地查看分析结果。它的选项包括

Usage: link-walker [OPTIONS] --url <URL>

Options:
  -u, --url <URL>  URL of the website to analyze links from
  -r, --relative   Whether to perform a deep search or not
  -d, --debug      Shows what URL walker is currently on
  -c, --construct  Constructs the stream of responses into a string and copies it to the clipboard
  -s, --singular   Checks if the domain of the URL is resolvable
  -h, --help       Print help
  -V, --version    Print version

例如,执行

link-walker --url "https://ynb.sh"

...将得到

Received 3 links. Iterating now...
https://ynb.sh/posts: 200 OK
https://github.com/ynbh: 200 OK
https://ynb.sh: 200 OK
Stats
Time to get all links: 0 seconds
Time to verify links: 0 seconds

但是,当使用 - 参数时,结果将类似于

Received 17 links. Iterating now...
https://en.wikipedia.org/wiki/Test_of_English_as_a_Foreign_Language: 200 OK
https://ynb.sh/assets/toefl-listening.png: 200 OK
https://ynb.sh/assets/toefl-reading.png: 200 OK
https://ynb.sh/posts/preparing-for-and-writing-the-TOEFL: 200 OK
An error occurred: error sending request for url (http://www.icsscsummerofcode.com/): error trying to connect: dns error: failed to lookup address information: nodename nor servname provided, or not known
https://ynb.sh/posts: 200 OK
https://ynb.sh/assets/toefl-writing-template.png: 200 OK
https://www.toeflresources.com/speaking-section/toefl-speaking-templates: 200 OK
https://ynb.sh/assets/toefl-speaking.png: 200 OK
https://ynb.sh: 200 OK
https://ynb.sh/assets/toefl-writing.png: 200 OK
http://zeroclipboard.org: 500 Internal Server Error
https://github.com/ynbh: 200 OK
https://ynb.sh/posts/free-speech-and-some-concerns: 200 OK
https://ynb.sh/posts/black-panther-wakanda-forever-review: 200 OK
https://ynb.sh/assets/toefl-speaking-template.png: 200 OK
Stats
Time to get all links: 1 seconds
Time to verify links: 0 seconds

要调试 walker 当前正在获取的 URL,只需传递一个 - 调试标志。

walker 无法解析某些任意 URL 的情况下,它会准确显示发生的确切错误。通常,这个错误是因为 reqwest 无法解析其 DNS。您可以通过运行 link---<URL> - 来检查这是否是情况。如果它没有返回错误,那么可能还有其他与 URL 相关的问题需要检查。

附加

请注意,这是一个实验性工具,我只是为了更好地了解 Rust 而制作了这个工具。我写了一篇博客文章,详细说明了我是如何制作它的!

依赖关系

~14–34MB
~557K SLoC