远程网页已更新 - 有时速度较慢,一次只需十分钟左右。有时更频繁,如每分钟或更频繁。我想要存储的页面上有一段数据,每当它发生变化时都会更新它(不一定抓住每次更改但不会落后于“当前”,并保持更新运行24 / 7)。
每分钟下载整个远程页面,检查它是否与以前版本不同,绝对是粗暴的。
每分钟为远程网站ping一次标题不会太过分。
如果有任何提示何时重新检查更新,或者服务器仅在内容更改后回复内容,那将是理想的。
如何在保持最新状态的同时尽量减少对远程服务器的不必要流量?
“观察者/更新者”是用PHP编写的,使用simplexml_load_file()
获取页面现在每分钟抓取一个远程URL,这样就可以很好地解决这个问题(例如,在确定文件不同只是重新连接实际内容半秒后,只是继续内容请求)可能是首选。
编辑:每个请求,示例标题。
> HEAD xxxxxxxxxxxxxxxxxxxxxxxxxxx HTTP/1.1
> User-Agent: curl/7.27.0
> Host: xxxxxxxxxxxxxx
> Accept: */*
>
* additional stuff not fine transfer.c:1037: 0 0
* HTTP 1/.1 or later with persistent connection, pipelining supported
< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 18 Feb 2014 19:35:04 GMT
< Content-Type: application/rss+xml; charset=utf-8
< Content-Length: 9865
< Connection: keep-alive
< Status: 200 OK
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< X-UA-Compatible: chrome=1
< ETag: "66509a4967de2c5984aa3475188012df"
< Cache-Control: max-age=0, private, must-revalidate
< X-Request-Id: 351a829a-641b-4e9e-a7ed-80ea32dcb071
< X-Runtime: 0.068888
< X-Powered-By: Phusion Passenger
< X-Frame-Options: SAMEORIGIN
< Accept-Ranges: bytes
< X-Varnish: 688811779
< Age: 0
< Via: 1.1 varnish
< X-Cache: MISS
答案 0 :(得分:2)
使用HEAD
发送HTTP cURL
请求并检索Last-Modified
值。这与GET
类似,但HEAD
仅传输状态行和标题部分,因此如果您发送HEAD
请求,则不会对其他服务器“粗鲁”。
在命令行中,我们可以使用以下命令实现此目的:
curl -s -v -X HEAD http://example.com/file.html 2>&1 | grep '^< Last-Modified:'
使用PHP的cURL库重写它应该不会太难。
答案 1 :(得分:2)
ETag: "66509a4967de2c5984aa3475188012df"
这是一个非常有前途的标题。如果它确实对应于页面本身的更改,则可以查询服务器设置此请求标头:
If-None-Match: "<the last received etag value>"
如果内容未被修改,服务器应以304 Not Modified
状态响应并且没有正文。见http://en.wikipedia.org/wiki/HTTP_ETag。它似乎也在运行缓存前端,所以无论如何你可能都没有太过努力。