【发布时间】:2018-08-23 00:08:16
【问题描述】:
检查死链接(例如指向 404 错误的链接)的一个非常好的工具是 wget --spider。但是,我有一个稍微不同的用例,我生成一个静态网站,并想在上传之前检查是否有损坏的链接。更准确地说,我想同时检查两者:
<a href="some/file.pdf">file.pdf</a>等相关链接绝对链接,最有可能指向外部网站,例如
<a href="http://example.com">example</a>。
我尝试了wget --spyder --force-html -i file-to-check.html,它读取本地文件,将其视为 HTML 并跟踪每个链接。不幸的是,它无法处理本地 HTML 文件中的相对链接(Cannot resolve incomplete link some/file.pdf 出错)。我尝试使用file://,但wget 不支持。
目前,我有一个基于通过python3 http.serve 运行本地网络服务器并通过 HTTP 检查本地文件的 hack:
python3 -m http.server &
pid=$!
sleep .5
error=0
wget --spider -nd -nv -H -r -l 1 http://localhost:8000/index.html || error=$?
kill $pid
wait $pid
exit $error
我对此并不满意,原因如下:
我需要这个
sleep .5来等待网络服务器准备好。没有它,脚本会失败,但我不能保证 0.5 秒就足够了。我希望有办法在服务器准备好时启动wget命令。相反,这个
kill $pid感觉很难看。
理想情况下,python3 -m http.server 可以选择在服务器准备好时运行命令,并在命令完成后自行关闭。这听起来可以通过编写一些 Python 来实现,但我想知道是否存在更简洁的解决方案。
我错过了什么吗?有更好的解决方案吗?我在我的问题中提到了wget,因为它几乎可以满足我的要求,但是使用wget 对我来说不是必需的(python -m http.server 也不是)。我只需要在 Linux 上轻松运行和自动化。
【问题讨论】:
标签: python hyperlink http-status-code-404 wget