V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sr0miao
V2EX  ›  Python

Python 通过文件下载链接下载文件,几乎每天文件都要更新,如何在下载文件前得知文件是否更新呢?

  •  
  •   sr0miao · 2018-02-08 09:12:55 +08:00 · 4188 次点击
    这是一个创建于 2462 天前的主题,其中的信息可能已经有所发展或是发生改变。

    别的公司每天不定时的会给我们数据,我们有一个定时系统检测文件数据是否更新,如果更新就下载。但有一个公司给我们的是 http 的文件下载链接,不知道如何在线上检测是否更新。之前的做法是下载下来和之前的作比较,有什么方法在下载钱就得知文件信息么? ps:刚刚实习,好多不懂的地方,请指教。

    15 条回复    2018-02-09 00:06:55 +08:00
    TimePPT
        1
    TimePPT  
       2018-02-08 09:29:37 +08:00 via iPhone
    让对方在下载链接带一个哈希值参数
    sunnyadam
        2
    sunnyadam  
       2018-02-08 09:37:12 +08:00
    顶楼上,带哈希值,如果下载链接每次都变可以比对链接地址,或者和对方商量一下,他们那边更新后通过接口给你一个消息,你方接受到消息则认为文件更新,然后进行下载;等等的,方法很多的
    CEBBCAT
        3
    CEBBCAT  
       2018-02-08 09:38:40 +08:00 via Android
    head 可以拿到文件大小,可以做简单的判断
    awenforlinux
        4
    awenforlinux  
       2018-02-08 09:39:44 +08:00   ❤️ 1
    last-modified
    fiht
        5
    fiht  
       2018-02-08 09:40:59 +08:00   ❤️ 2
    etag
    sr0miao
        6
    sr0miao  
    OP
       2018-02-08 10:03:21 +08:00
    @awenforlinux 阁下正解,十分感谢
    scriptB0y
        7
    scriptB0y  
       2018-02-08 10:06:25 +08:00   ❤️ 1
    @fiht etag+1 https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=zh-cn#etag

    不过也需要服务器端正确实现才可以,如果没实现,还是让他们在链接加一个 hash 参数简单
    sr0miao
        8
    sr0miao  
    OP
       2018-02-08 10:10:02 +08:00
    @scriptB0y 能让对方改的话我就让他们利用 ftp 或 sftp 了,沟通十分艰难。
    sr0miao
        9
    sr0miao  
    OP
       2018-02-08 10:28:46 +08:00
    @sr0miao
    @fiht
    etag 也很不错,但我要在数据库记录时间,所以用了 last-modified
    qsnow6
        10
    qsnow6  
       2018-02-08 10:31:23 +08:00   ❤️ 1
    last-modified、etag、Content-Length

    都可以,简单、高效
    qsnow6
        11
    qsnow6  
       2018-02-08 10:41:50 +08:00   ❤️ 1
    最低成本的是使用 If-Modified-Since,给 If-Modified-Since 设置一个时间,源服务器会比对时间,当资源的更新时间大于 If-Modified-Since 的值时,返回 200 状态码,否则就是 304。

    https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/If-Modified-Since
    vimiix
        12
    vimiix  
       2018-02-08 12:27:00 +08:00
    让对方每次更新都提供文件的 MD5 值,判断值是否相同
    pabupa
        13
    pabupa  
       2018-02-08 14:13:32 +08:00
    最后修改时间呀~
    laodao1990
        14
    laodao1990  
       2018-02-08 15:02:52 +08:00
    第一次听说 etag,学习了。感谢!
    Xieldy
        15
    Xieldy  
       2018-02-09 00:06:55 +08:00
    学到了学到了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3440 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.