1. 程式人生 > >Android 載入html,兩種新增Cookies的方法!

Android 載入html,兩種新增Cookies的方法!

方式一:

 public void synCookies(Context context, String url) {
        CookieSyncManager.createInstance(context);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.removeSessionCookie();//移除
        cookieManager.setCookie(url, String.format("%s=%s", "uid", userEntry.getId()));
        cookieManager.setCookie(url, String.format("%s=%s", "xx", userEntry.getxxx()));
        cookieManager.setCookie(url, String.format("%s=%s", "xxx", userEntry.getPortCode()));

        CookieSyncManager.getInstance().sync();
    }

    方式2:
 private void synCookies(final Context context, final String url){


            new Thread(new Runnable() {
                @Override
                public void run() {
                    CookieSyncManager.createInstance(context);
                    CookieManager cookieManager = CookieManager.getInstance();
                    try {
                        URL urlT=new URL(url);
                        try {
                            HttpURLConnection urlConnection=(HttpURLConnection) urlT.openConnection();
                            String  cookieString=urlConnection.getHeaderField("Set-Cookie");
                            //使用cookieManager..setCookie()向URL中新增Cookie
                            cookieManager.setCookie(url, cookieString);
                            CookieSyncManager.getInstance().sync();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    方式二的變種:
 /**
     * 同步一下cookie
     */
    //    public  void synCookies(Context context, String url) {
    //        CookieSyncManager.createInstance(context);
    //        CookieManager cookieManager = CookieManager.getInstance();
    //        cookieManager.setAcceptCookie(true);
    //        cookieManager.removeSessionCookie();//移除
    //        String cookies=paramsUrl;
    //        cookieManager.setCookie(url, cookies);//cookies是在HttpClient中獲得的cookie
    //        CookieSyncManager.getInstance().sync();
    //    }
  如果有cookies有很多項的話,新增方式如下:


用法:

synCookies(this, ContantUrl.carriage_suitcase);
mWebView.loadUrl(url);
注意事項: 新增cookies的時候,setCookies(url,"xxx");中的url 是最基本的url 不要帶引數!!!
結果:

    

       還有一種新增請求頭的方式; 但是方式和效果如下:

Map<String, String> headers=new TreeMap<>();
        headers.put("uid",userEntry.getId());
        headers.put("xxx",userEntry.getTxxx());
        headers.put("xxx1",userEntry.getPortxxx());
        mWebView.loadUrl(url, headers);
        mWebView.setWebChromeClient(new WebViewClient());
        mWebView.setWebViewClient(new android.webkit.WebViewClient());
      注意事項:

         這種方式的話,這兩行註釋掉,如果你的程式碼中有這兩行,原因,我忘記了,自行百度

//        webSettings.setSupportZoom(false);
//        webSettings.setBuiltInZoomControls(false);
  效果如下:


圖片沒有截全 : 兩種新增的效果通過抓包還是有區別的,自己仔細看一下,這種新增方式,雖然也是新增請求頭,但是這三個引數前面,抓包的時候,會歸類為:Miscellaneous (雜項:) 這兩種新增效果,主要看公司的要求了,
還有一些公司和js互動,為了保證安全,會不用cookies 而改為seesion.