私はこの質問が100回尋ねられたことを知っています、そして私は今2時間読んで試しました、しかし私は私のエラーを見つけることができません:-(
私は単純なWebブラウザーを作成しようとしているので、Webビューがあり、サイトにログインして画像領域にアクセスできます。DefaultHttpClientの助けを借りて、セキュリティで保護された領域に写真をダウンロードできるようにしたいと思います。したがって、私はWebビューからCookieを共有し、それらをHttpClientに渡して、認証されてダウンロードできるようにしようとしています。しかし、何をしようとしても、常に403応答が返されます...
基本的な手順は次のとおりです。
1)URLを入力し、webviewがWebサイトをロードします
2)フォームにログインの詳細を入力します
3)画像に移動し、コンテキストメニューを長押しします
4)画像のURLを取得し、AsynTaskに渡してダウンロードします
Cookieを使用したAsyncTaskのコードは次のとおりです。
protected String doInBackground(String... params) {
//params[0] is the URL of the image
try
{
CookieManager cookieManager = CookieManager.getInstance();
String c = cookieManager.getCookie(new URL(params[0]).getHost());
BasicCookieStore cookieStore = new BasicCookieStore();
BasicHttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
String[] cookieParts = null;
String cookies[] = null;
cookies = c.split(";");
for(int i=0;i<cookies.length;i++)
{
cookieParts = cookies[i].split("=");
BasicClientCookie sessionCookie = new BasicClientCookie(cookieParts[0].trim(), cookieParts[1].trim());
sessionCookie.setDomain(new URL(params[0]).getHost());
cookieStore.addCookie(sessionCookie);
}
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.setCookieStore(cookieStore);
HttpGet pageGet = new HttpGet(new URL(params[0]).toURI());
HttpResponse response = httpClient.execute(pageGet, localContext);
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
->決して起こらない、常に403を取得する
。)問題の1つは、WebビューがホストのCookieを保存することです* www。* example.comですが、ダウンロードするimage-URL(params [0])は*静的です。*example.com。cookieManager.getCookie(new URL(params[0]).getHost());
static.example.comにはCookieがなく、www.example.comにのみCookieがあるため、この行
はnullを返します。
。)手動でcookieManager.getCookie( "www.example.com");と言うと いくつかのCookieを取得し、これをHttpClientCookieストアに追加します。5つのCookieが追加されています--testcookie= 0 --PHPSESSID = 320947238someGibberishSessionId --email = my@email.net --pass = 32423te32someEncodedPassGibberish --user = 345542
したがって、これらのCookie、セッションID、その他のものはHttpClientに追加されますが、画像をダウンロードすることはできません。私は完全に失われました...それはCookieドメインと関係があるか、Imがまだ他のCookieを失っていると思いますが。
しかし、Cookieを取り戻すために特定のURLを指定する必要がある場合、WebビューにどのCookieが存在するかをどこから知る必要がありますか?:-(
何かアドバイス?