在我的應用程序中,我使用LWP定期獲取網頁。無論如何檢查連續兩次提取網頁是否在某些方面發生了變化(除了明確地進行比較)嗎?是否有可以提取的較低協議層生成的任何簽名(比如CRC),並與舊簽名進行比較以查看可能的更改?如何檢測更改後的網頁?
3
A
回答
4
有兩種可能的方法。一種是使用頁面的摘要,例如
use strict;
use warnings;
use Digest::MD5 'md5_hex';
use LWP::UserAgent;
# fetch the page, etc.
my $digest = md5_hex $response->decoded_content;
if ($digest ne $saved_digest) {
# the page has changed.
}
另一種選擇是使用HTTP ETag的,如果服務器提供一個用於請求的資源。您可以簡單地存儲它,然後設置您的請求標題以在後續請求中包含If-None-Match
字段。如果服務器ETag保持不變,您將獲得304 Not Modified
狀態和空的響應主體。否則,你會得到新的頁面。 (和新的ETag。)請參閱RFC2616中的Entity Tags。
當然,服務器可能在說謊,併發送即使內容已經改變了相同的ETag。除非你看,否則無法知道。
3
您應該使用If-Modified-Since
request header,注意RFC中的陷阱。您發送該請求的頭部。如果服務器支持它並認爲內容較新,則會將其發送給您。如果它認爲你有最新版本,它將返回一個沒有消息正文的304
。
然而,由於其他答案已經指出,服務器不必告訴你真相,所以你有時會卡住下載內容和檢查自己。許多動態的東西總是會聲稱擁有新的內容,因爲許多開發人員從未想過在他們的Web應用程序中支持基本的HTTP事情。
對於LWP位,您可以創建一個額外的頭一個請求:
use HTTP::Request;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $request = HTTP::Request->new(GET => $url);
$r->header('If-Modified-Since' => $time);
$ua->request($request);
對於所有的請求,你可以設置一個請求處理程序:
$ua->add_handler(
request_send => sub {
my($request, $ua, $h) = @_;
# ... look up time from local store
$r->header('If-Modified-Since' => $time);
}
);
然而,LWP可以做這個最適合你用mirror
如果你要保存的文件:
$ua->mirror($url, $filename)
相關問題
- 1. 檢測網頁內容中的更改
- 2. 檢測到更改的網頁Api
- 3. 如何更改網址並檢測後退按鈕
- 4. 檢測網頁何時更新
- 5. 如何檢測更改IDbSet
- 6. 如何檢測tika的farsi網頁?
- 7. 檢測ASP.NET網站中的更改
- 8. 檢測jQuery Mobile上的更改頁面
- 9. Angular2更改檢測「檢查後表達式已更改」
- 10. 如何檢測DOMAttrModified的類更改
- 11. 如何檢測IE上的類更改
- 12. 如何檢測Bootstrap Multiselect中的更改
- 13. 如何檢測wp_editor中的更改?
- 14. 如何檢測Amazon S3中的更改?
- 15. VHDL - 如何檢測std_logic_vector上的更改?
- 16. 如何檢測NSUserDefault中的更改?
- 17. 如何檢測UIPickerView上的更改?
- 18. 如何檢測WCF模型的更改?
- 19. 刷新後保留網頁的更改
- 20. 網頁更新檢測算法
- 21. 使用python檢測網頁更新
- 22. 如何檢測Control.PreferredSize何時更改?
- 23. 如何檢測服務何時更改?
- 24. 如何檢測輸入何時更改?
- 25. Javascript。如何檢測window.document何時更改?
- 26. 如何檢測網頁攔截器,然後採取行動?
- 27. PHP HTTP_REFERRER - 如何檢測最後一頁?
- 28. 如何在幾分鐘後更改網站頁面的內容?
- 29. 檢測訪問的網頁
- 30. 檢測類似的網頁
參見[HEAD](http://www.w3.org/Protocols/rfc261 6/rfc2616-sec9.html#sec9.4)請求。您可以查看最近修改的內容,內容長度等。 – Rob 2012-04-18 00:18:18
您是否需要針對特定網站的通用解決方案或解決方案。我在問,因爲最好的解決方案(CPU和網絡使用效率更高)可能取決於服務器的功能。 – dolmen 2012-04-18 13:25:24