如何在Ruby下载之前获取远程文件的mtime?

我有以下代码,只需下载文件并保存。 我想每隔30秒运行一次,检查远程文件的mtime是否已更改,如果有,则下载它。 为了这个目的,我将创建一个在无限循环的每次迭代后hibernate30秒的线程,但是; 如何在不下载的情况下检查远程文件的mtime?

Net::HTTP.start($xmlServerHostname) { |http| resp = http.get($xmlServerPath+"levels.xml") open("levels.xml", "w") { |file| file.write(resp.body) } } 

在您执行http.get之前,请执行一个http.head , 它只请求头文件而不下载正文(即文件内容),然后检查Last Modified标头的值是否已更改。

例如

 resp = http.head(($xmlServerPath+"levels.xml") last_modified = resp['last-modified'] if last_modified != previous_last_modified # file has changed end 

您可以尝试使用格式正确的日期发送If-Modified-Since标头。

如果服务器支持它,它只能回答304 Not Modified状态(没有任何内容)或完整内容(如果文件已被修改)。