1

私はこの質問が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が存在するかをどこから知る必要がありますか?:-(

何かアドバイス?

4

2 に答える 2

0

あなたはおそらく、それがかなり遅い答えであるため、すでに答えを理解しているでしょう。でも、念のため…

これを試して。WebView から Cookie を取得するときexample.comは、ドメイン名で使用するだけです。に Cookie をBasicClientCookie設定し、ドメインを設定する場合は、ドメイン名を に設定します.example.com。「。」に注意してください。最初に。さて、セッションはアプリケーションのすべてのサブドメインで機能するはずです。

于 2013-01-22T00:16:13.263 に答える