Android 載入html,兩種新增Cookies的方法!
阿新 • • 發佈:2019-01-25
方式一:
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(); }
如果有cookies有很多項的話,新增方式如下:/** * 同步一下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(); // }
用法:
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.