当然可以在 Python 中组合一些东西来查询 URL,以查看它上次修改的时间,使用 HTTP 标头,但我想知道是否有现有的工具可以为我做到这一点?我会想象这样的事情:
% checkurl http://unix.stackexchange.com/questions/247445/
Fri Dec 4 16:59:28 EST 2015
或者可能:
% checkurl "+%Y%m%d" http://unix.stackexchange.com/questions/247445/
20151204
作为铃声和/或口哨声。我认为 wget 或 curl 没有我需要的东西,但如果被证明是错误的,我不会感到惊讶。那里有这样的东西吗?
答案1
这似乎符合您的要求(更新为使用 '\r\n' 作为响应数据的记录分隔符):
#!/bin/sh
get_url_date()
{
curl --silent --head "${1:?URL ARG REQUIRED}" |
awk -v RS='\r\n' '
/Last-Modified:/ {
gsub("^[^ ]*: *", "")
print
exit
}
'
}
unset date_format
case $1 in
(+*)
date_format="$1"
shift
;;
esac
url_date="$(get_url_date "${1:?URL ARG REQUIRED}")"
if [ -z "$url_date" ]
then
exit 1
fi
if [ "$date_format" != "" ]
then
date "$date_format" -d"$url_date"
else
echo "$url_date"
fi
答案2
Perl 一行代码:
% perl -MLWP::Simple -MDate::Format -e 'print time2str "%C\n", (head $ARGV[0])[2]' http://example.com
Sat Aug 10 02:54:35 EEST 2013
在现代 Linux 或 FreeBSD 系统上,它所需的模块可能已经安装。
答案3
事实证明,curl 和 wget 都可以做到这一点,但毕竟在 Python 中可能值得这样做。这是我最终写的:
#!/usr/bin/env python3
import sys, dateutil.parser, subprocess, requests
from getopt import getopt
errflag = 0
gTouch = None
gUsage = """Usage: lastmod [-t file] url
where:
-t file Touches the given file to make its modification date
the same as the URL modification date.
url A URL to be retrieved
"""
opts, args = getopt(sys.argv[1:], "t:v?")
for k, v in opts:
if k == "-t": # File to touch
gTouch = v
elif k == "-?": # Write out usage and exit
errflag += 1
if len(args) != 1:
errflag += 1
if errflag:
sys.stderr.write(USAGE)
sys.exit(1)
res = requests.head(args[0])
if res.status_code != 200:
sys.stderr.write("Failed to retrieve URL\n")
sys.exit(1)
if not 'Last-Modified' in res.headers:
sys.stderr.write("Headers has no last-modified date\n")
sys.exit(1)
dt = dateutil.parser.parse(res.headers['Last-Modified'])
if gTouch:
subprocess.call(["touch", "-t", dt.strftime("%Y%m%d%H%m"), gTouch])
else:
sys.stdout.write("%s\n" % dt.ctime())
答案4
查看Carbon14;它是一个命令行 python 工具,用于从图像中检测网页历史记录。如果您的检查网页上有一些图像,则效果很好。安装自Carbon14 Github 存储库,安装后运行;
python carbon14.py <url>