2012-06-07 18 views
8

我正在使用android DownloadManager API從我學校的服務器上下載文件。我有權以登錄方式訪問這些文件,但我無法弄清楚的是如何使用我的DownloadManager.Request提交cookie下載代碼如下。 dm是一個全球性的DownloadManagerurl是一個重定向到文件的php下載腳本,通常是pdf/doc/etc。是否有可能在Android DownloadManager中提交Cookie

dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
Request request = new Request(Uri.parse(url)); 
dm.enqueue(request); 

Intent i = new Intent(); 
i.setAction(DownloadManager.ACTION_VIEW_DOWNLOADS); 
startActivity(i); 

這工作正常,但我得到一個html文件下載,這是我學校網站的登錄頁面。很明顯,我需要以某種方式提交用戶的會話cookie,但我無法在文檔中看到這樣做的任何方式。

回答

18

Cookie通過HTTP標頭(足夠恰當,名爲「Cookie」)發送,幸運的是,DownloadManager.Request has a method添加了您自己的標頭。

所以,你想要做的是這樣的:

Request request = new Request(Uri.parse(url)); 
request.addRequestHeader("Cookie", "contents"); 
dm.enqueue(request); 

你必須與實際cookie的內容替換,當然「內容」。 CookieManager類應該對獲取網站的當前cookie有用,但如果失敗,另一種選擇是讓您的應用程序發出登錄請求並獲取返回的cookie。

+3

完美運作。我已經在一個'Map '手動管理cookie了,所以就像'KEY1 = VALUE1; KEY2 = VALUE2;'格式化一樣簡單,並將它傳遞給你提到的函數。謝謝! – Logiraptor

+0

這只是完美的 - 沿着其他幾條路而行,但它釘了它!我通過調用「CookieManager.getInstance()。getCookie(url);」來從onPageFinished獲得我的cookies。然後我可以直接將結果用作Cookie值! – slott

相關問題