2015-11-02 72 views
0

我试图从URL中获取信息,即知道当会话时间从URL过期时?例如,如果您尝试连接到URL并从Mediafire下载带有IDM的文件,则暂停它。自第一次连接到Mediafire的URL 4小时后,您正试图重新连接并恢复下载。不幸的是,你会收到一条消息:从URL中提取会话到期

403:禁止。您无权访问此服务器上的file.zip。

或此消息:

也许这个网站使用了不能申请两次或结束会话时,一段时间后过期的临时链接。

这意味着Mediafire给我们最多的时间来重新连接。所以你必须在这段时间内恢复下载。

我曾尝试:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setRequestMethod("GET"); 
urlConnection.connect(); 
String exp = urlConnection.getHeaderField("Expires"); 
System.out.println("Expire date: " + exp); 

输出:

Expire date: null // while responseCode is 200 OK 

有时,不同URL,我得到了Tue, 03 Nov 2015 03:41:09 PST

那么,我该如何知道会话时间何时到期?

提前致谢。

回答

1

根据RFC,并不总是有一个expires标题字段。

Section 5.3

没有时钟绝不能产生原始服务器过期时间字段 除非其值表示 或它的值已经由与资源相关联,在过去固定的时间(总是过期)系统或 用户提供可靠的时钟。

Furthermore it defines the Freshness in 4.2

如果源服务器希望强制缓存来验证每个 请求时,它可以在过去的指定明确的到期时间 表明反应已经过时。合规高速缓存 通常会验证一个陈旧的高速缓存响应,然后再用于后续请求(请参阅第4.2.4节)。

由于原始服务器并不总是提供明确的到期时间,因此在某些情况下(见第4.2.2节),高速缓存也被允许使用启发式来确定到期时间 。

So in order to get a somewhat reliable headerfield you can calculate it

由于原始服务器并不总是提供明确的到期时间, 缓存可以分配一个启发式过期时间时没有指定明确的时间 时,采用的是使用其他报头字段算法 值(例如上次修改时间)来估计合理的到期时间。本规范没有提供具体的 算法,但对结果施加了最坏情况约束。