HTTP 헤더를 사용하여 마지막으로 수정된 시기를 확인하기 위해 URL을 쿼리하기 위해 Python에 무언가를 함께 넣는 것은 확실히 가능합니다. 하지만 이 작업을 수행할 수 있는 기존 도구가 있는지 궁금합니다. 나는 다음과 같은 것을 상상할 것입니다 :
% 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이나 컬이 나에게 필요한 것을 갖고 있지 않다고 생각하지만 그것이 잘못된 것으로 판명되더라도 놀라지 않을 것입니다. 거기에 그런 것이 있습니까?
답변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
컬과 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>