欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Android?Webview?設(shè)置Cookie問(wèn)題詳解

 更新時(shí)間:2021年11月25日 16:54:31   作者:piaoershi  
大家好,本篇文章是關(guān)于Android?Webview?設(shè)置Cookie問(wèn)題詳解,感興趣的同學(xué)可以看看,希望對(duì)你起到幫助,有用的話記得收藏,方便下次瀏覽

最近遇到一個(gè)比較坑爹的問(wèn)題就是webview里添加第三方H5頁(yè)面,但是數(shù)據(jù)獲取不到,經(jīng)過(guò)一天的折磨發(fā)現(xiàn)cookie值每次都會(huì)變,再根據(jù)谷歌開(kāi)發(fā)者模式定位,cookie每次應(yīng)該都是固定,每次變化說(shuō)明本地的cookie有問(wèn)題,或者為空。

webview有一個(gè)CookieManager這個(gè)類(lèi),他是專(zhuān)門(mén)管理cookie的,這個(gè)類(lèi)可以設(shè)置一個(gè)或多個(gè)cookie,而且當(dāng)你在里面設(shè)置好cookie以后接口會(huì)自動(dòng)根據(jù)你設(shè)置時(shí)的url來(lái)使用。

一共有兩種獲取cookie的方法一種是HttpURLConnection獲取,一種是直接利用CookieManager獲取。

第一種根據(jù)url利用HttpURLConnection獲取接口中的cookie()

/**
     * 獲取接口中的cookie
     * @param loginUrl
     */
    private void syncCookie(final String loginUrl) {
        try {
            StringBuilder builder = new StringBuilder();
            URL url = null;
            byte[] data = builder.toString().getBytes("UTF-8");
            url = new URL(loginUrl);
            HttpURLConnection connection =
                    (HttpURLConnection) url.openConnection();

            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type",
                    "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length",
                    Integer.toString(data.length));
            connection.setInstanceFollowRedirects(false);
            connection.setRequestMethod("GET");
            OutputStream os = connection.getOutputStream();
            os.write(data);
            os.close();
            int aRstCode = connection.getResponseCode();
            if (aRstCode == HttpURLConnection.HTTP_OK) {
                cookie = connection.getHeaderField("Set-Cookie");
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

第二種直接利用CookieManager獲取

cookieManager.getCookie(url);

這兩種返回的cookie是有一些區(qū)別的,看你需要哪一種。

設(shè)置cookie 允許它跨域

		CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.setAcceptThirdPartyCookies(mWebView, true);//TODO 跨域cookie讀取
            Log.d(TAG,"跨域cookie讀取");
        }

把cookie設(shè)置道webview里

/**
     *@param cookie 上面獲取到的存儲(chǔ)在本地的cookie字符串
     *@param url 要加載的頁(yè)面url
     */
    @SuppressLint("NewApi")
    private void setCookie(String cookie, String url) {
        String StringCookie = cookie;
        CookieSyncManager.createInstance(this);
        if (cookieManager == null) {
            cookieManager = CookieManager.getInstance();
        }
        cookieManager.setAcceptFileSchemeCookies(true);
        cookieManager.setAcceptCookie(true);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {//這個(gè)代碼是清楚webview里的所有cookie加不加完全看你自己。
            cookieManager.removeSessionCookies(null);
            cookieManager.flush();
        } else {
            cookieManager.removeAllCookie();
            CookieSyncManager.getInstance().sync();
        }
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                cookieManager.setCookie(url, StringCookie, new ValueCallback<Boolean>() {
                    @Override
                    public void onReceiveValue(Boolean aBoolean) {
                        Log.d(TAG,"setCookie() aBoolean:"+aBoolean);
                    }
                });
            }
        });
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.flush();
        } else {
            CookieSyncManager.getInstance().sync();
        }
    }

注意 注意 注意:重要的事情說(shuō)三遍

有些機(jī)型只支持單獨(dú)設(shè)置cookie就比如(瞎寫(xiě)的)
session=jashdkjashdkashdk;path=path
如果你直接把這一整串setCookie進(jìn)入,是設(shè)置不進(jìn)去的,你需要把他們根據(jù)分號(hào)切割開(kāi),一個(gè)一個(gè)的給它們?cè)O(shè)置進(jìn)去。像這種cookieManager.setCookie(url,“session=jashdkjashdkashdk”)(如果你直接設(shè)置進(jìn)去,并且成功了就當(dāng)我后面說(shuō)的是廢話)

到此這篇關(guān)于關(guān)于Android Webview 設(shè)置Cookie問(wèn)題詳解的文章就介紹到這了,更多相關(guān)Android Webview 置Cookie問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論