2012-06-07 23 views
8

をクッキーを提出することが可能です。私はログインでこれらのファイルにアクセスする許可を持っていますが、私が把握できなかったのは、私のDownloadManager.Requestでクッキーを送信する方法です。ダウンロードコードは以下の通りです。 dmは、グローバルDownloadManagerであり、urlは、ファイル(通常はpdf/doc/etc)にリダイレクトするPHPダウンロードスクリプトです。は、それは私が私の学校のサーバーからファイルをダウンロードするには、Android <code>DownloadManager</code> APIを使用していアンドロイドDownloadManagerで

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

クッキーは、HTTPヘッダ(名前は、適切なことに、「クッキー」)を経由して送信され、幸いにも、DownloadManager.Request has a methodは、独自のヘッダを追加します。

だから何あなたがしたいと思い、このようなものです:

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

あなたはもちろん、実際のクッキーの内容を「内容」を交換する必要があります。 CookieManagerクラスはサイトの現在のCookieを取得するのに便利ですが、失敗した場合は、アプリケーションにログインリクエストを行い、返されたCookieを取得させることもできます。

+3

これは完全に機能しました。私は既に 'Map 'でクッキーを手動で管理していたので、 'KEY1 = VALUE1; KEY2 = VALUE2;と書式設定し、あなたが言及した関数に渡すのと同じくらい簡単でした。ありがとう! – Logiraptor

+0

これはちょうど完璧です - 他のいくつかの道路を降りてきましたが、これはそれを釘付けにしました!私は "CookieManager.getInstance()。getCookie(url);"を呼び出してonPageFinishedから自分のクッキーを取得します。 Cookieの値として直接使用することができます。 – slott

関連する問題