我想要創建一個腳本來檢查URL,並在遠程文件的「Last-Modified」標題發生變化時執行操作(下載+解壓縮)。我想過用curl來獲取頭文件,但是我必須將它存儲在每個文件的某個位置並執行日期比較。如何在遠程(Http)文件更改時執行操作?
有沒有人有使用(主要是)標準的unix工具有不同的想法?
感謝
我想要創建一個腳本來檢查URL,並在遠程文件的「Last-Modified」標題發生變化時執行操作(下載+解壓縮)。我想過用curl來獲取頭文件,但是我必須將它存儲在每個文件的某個位置並執行日期比較。如何在遠程(Http)文件更改時執行操作?
有沒有人有使用(主要是)標準的unix工具有不同的想法?
感謝
一個可能的解決辦法是定期運行在客戶盒這個算法。
If-Modified-Since
標頭等於您的本地文件的日期。如果文件不存在,請不要包含此標題;If-Modified-Since
標頭以來發生更改,或者發送304 Not Modified
HTTP狀態,則服務器將向您發送文件。200 OK
HTTP狀態,只需從HTTP正文獲取有效內容並解壓縮該文件。304 Not Modified
,則表明您的文件是最新的。Last-Modified
標題觸摸您的本地文件。這樣您將與服務器日期時間同步。另一種方法是服務器在更改文件時推送通知(例如廣播包)。當收到通知時,客戶端將執行上述算法。這意味着代碼將駐留在偵聽文件系統更改的HTTP服務器中,然後將它們廣播給感興趣的各方。
也許這信息爲curl
command一定的重要性:
時間等條件
HTTP允許客戶爲其指定 請求該文檔的時間 條件。它是If-Modified-Since或者If-Unmodified-Since。捲曲讓你 用-z/- time-cond 標誌指定它們。
例如,您可以輕鬆地進行 下載,只有在 遠程文件比本地 副本更新時才能執行下載。它會作出這樣的:
捲曲-z local.html http://remote.server.com/remote.html
或者只在 本地文件比遠程 一個較新的,你可以下載一個文件。 「 - 」在前面加上日期 字符串以做到這一點,如:
捲曲-z -local.html http://remote.server.com/remote.html
你可以指定一個「自由文本」日期 條件。告訴捲曲只下載 該文件,如果有人因爲 昨天更新:
捲曲-z昨天 http://remote.server.com/remote.html
然後捲曲將接受廣泛的 日期格式。你總是讓日期 檢查其他方式 用短劃線' - '加上,並用短劃線' - '作爲前綴。
綜上所述,你將需要:
就是Java適合你的情況?我在使用Apache HTTPcore庫的作業之一中做了類似的事情,在將它發送到服務器之前,如果您的響應的狀態碼是您的,則需要在您的HTTP請求中添加頭部「If-Modified-Since」從服務器接收不是304,那麼你知道該文件自你檢查的時間值以來已經改變。
不錯:)'curl -z'。太糟糕了,http服務器似乎忽略了if-modified-since :(但是可能curl會修復它。我試試:) – ZeissS 2010-05-28 12:03:40
你有使用工具的'If-Modified-Since'的格式嗎?參見[這裏](http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#if-modified-since)。 格式如[RFC850](http://www.w3.org/Protocols/rfc850/rfc850.html#z10)但必須使用GMT。 無論如何,'curl-z'應該避免在如何獲得'If-Modified-Since'標頭右格式時遇到的問題。 – 2010-05-28 12:06:25
是的,沒錯,但該死的oracle服務器似乎忽略了它。它甚至在請求HEAD時發送內容;)但是沒關係,它現在使用'curl -z'工作 – ZeissS 2010-05-28 12:30:20