2015-11-02 66 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

由於原始服務器並不總是提供明確的到期時間, 緩存可以分配一個啓發式過期時間時沒有指定明確的時間 時,採用的是使用其他報頭字段算法 值(例如上次修改時間)來估計合理的到期時間。本規範沒有提供具體的 算法,但對結果施加了最壞情況約束。