Android WebView 与HttpClient 共用本地cookie问题

Android中Cookie管理及WebView同步实战 在构建现代Web应用或移动应用时,HTTP Cookie常被用于维护客户端与服务器之间的状态。在Android平台上,Cookie机制同样扮演着至关重要的角色,特别是在需要处理会话和用户偏好设置时。自定义是为了处理各种页面加载事件,例如页面开始加载、加载完成以及加载失败。@Override@Override// 页面开始加载时的操作@Override// 页面加载完成时的操作在中,方法告诉WebView直接加载URL,而不是打开外部浏览器。和。 阅读详情

参考:https://gist.github.com/arpit/610754

http://www.cnblogs.com/loveyakamoz/archive/2011/07/21/2113246.html

我是为了解决:WebView 缓存下来的cookie可以用于HttpClient,因为我的HttpClient单独需要取一些数据,但是依赖于本地的cookie。如果没有cookie返回来的是登录页面

核心代码: 1. mainActivity.java

public void onCreate(Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main_fragment, container, false); mWebView = (WebView) v.findViewById(R.id.webview); MyWebViewClient webviewClient = new MyWebViewClient(); mWebView.setWebViewClient(webviewClient); WebSettings webset = mWebView.getSettings(); webset.setJavaScriptEnabled(true); mWebView.loadUrl(Constants.TALKGROUP_URL); return v; } private class MyWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); IWLog.d(TAG, "onPageFinished() url is:"+url); /* 将cookie保存起来*/ String c = CookieManager.getInstance().getCookie(url); DataCenter.setCookie(c); CookieSyncManager.getInstance().sync(); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { IWLog.d(TAG, "onReceivedError() errorCode:" + errorCode+"----failingUrl"+failingUrl); super.onReceivedError(view, errorCode, description, failingUrl); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { IWLog.d(TAG, "shouldOverrideUrlLoading() url:" + url); return super.shouldOverrideUrlLoading(view, url); } }

2 DataCenter.java

public class DataCenter { private static String cookies; public static String getCookie() { return cookies; } public static void setCookie(String cks) { cookies = cks; } }

3 MyHttpClient.java

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import org.apache.http.HttpResponse; import org.apache.http.client.CookieStore; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.protocol.ClientContext; import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.protocol.BasicHttpContext; import com.petsea.data.DataCenter; import com.petsea.data.NavigationUrl; import android.graphics.Bitmap; import android.os.AsyncTask; import android.util.Log; public class MyHttpClient { public static String TAG = "MyHttpClient"; public void execute() { RequestChatListTask task = new RequestChatListTask(); task.execute(); } private class RequestChatListTask extends AsyncTask<Bitmap, Integer, String> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Bitmap... params) { BufferedReader in = null; DefaultHttpClient httpclient; BasicHttpContext localContext; CookieStore cookieJar; try { httpclient = new DefaultHttpClient(); cookieJar = new BasicCookieStore(); localContext = new BasicHttpContext(); HttpGet httpget = new HttpGet(); httpget.setURI(new URI(NavigationUrl.CHAT_LIST_URL));//这里是你要请求的地址 String _cookie = DataCenter.getCookie(); if(_cookie !=null && !_cookie.equals("")){ String[] cookies = _cookie.split(";"); for(int i=0; i< cookies.length; i++){ String[] nvp = cookies[i].split("="); BasicClientCookie c = new BasicClientCookie(nvp[0], nvp[1]); //c.setVersion(0); c.setDomain("www.baidu.com");//这里是自己的主机地址 cookieJar.addCookie(c); } } localContext.setAttribute(ClientContext.COOKIE_STORE, cookieJar); HttpResponse response = httpclient.execute(httpget,localContext); int code = response.getStatusLine().getStatusCode(); System.out.print("code is="+code);//返回200是正确的 in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); String page = sb.toString(); ///System.out.println(page); return page; //success } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Log.i(TAG, "onPostExecute result is:" + result); } } }

上面只是我工程的一部分代码,主要来说明问题的。不便把全部代码上传。 我也是调试了一阵才弄出来的。给大家推荐一个工具:WireShark 用于抓取网络包的,可以查看你的http请求以及返回,里面会显示到cookie的内容还有其它格式 下载地址 http://www.wireshark.org/download.html








        
webview与服务器共享cookie操作 实现了与服务器端进行共享cookie的实现,实现与服务器登录的同步操作 立即下载

相关推荐

戴尔笔记本装Ubuntu 20.04,别急着分区!先搞定这个BIOS设置(Intel RST避坑指南)

本文详细介绍了在戴尔笔记本上安装Ubuntu 20.04时遇到的Intel RST技术兼容性问题及解决方案。通过安全切换至AHCI模式,避免安装过程中找不到硬盘的常见问题,并提供双系统分区策略和安装后的优化建议,确保Ubuntu与Windows 10双系统稳定运行。

weixin_31315567的博客 272

Android Cookie共享到WebView避免再次登录(保持登录状态)

欢迎访问个人网站:http://www.bincpu.com最近在做项目时用到了webview打开指定链接的网页,可已经把webview设置了cookie但始终跳转到登录页面,这明显是cookie没有设置成功导致webview没有将设置好的cookie发送出去……CookieSyncManager.createInstance(context); CookieManager...

weixin_34293902的博客 644

MATLAB/simulink电力系统之变压器仿真+变压器饱和仿真+空载变压器电流畸变原因及仿真+空载合闸励磁涌流仿真+simulink免费仿真资源

单相变压器空载运行时,原边电流主要用来产生主磁场,而电路损耗和铁芯损耗很小,因此即使外加电压很大,空载电流仍然很小。如果想观察某个相对磁导率下电感系数的数值,可以在程序中增加这样的语句,比如,在程序中end语句之后,加上L(100),运行程序后就可以得到相对磁导率为 100时的电感系数值。在交流铁芯线圈中,当交变磁通按照正弦规律变化时,受到磁路饱和的影响,线圈中的电流会发生畸变,并成为尖顶波,这就是所谓的交流磁路电流畸变。需要指出,铁芯内的主磁通Ф可以通过空载时的副边电压从来测量,两者之间的数学关系,即。

m0_37724753的博客 4230

Android: HttpClient与Webview共享cookies

httpclient与webview需要进行cookie 共享,因为如果不共享,那么假设你在httpclient进行了登录,然后用webview里打开那些login之后才能看的page,就会叫你再login DefaultHttpClient httpclient=....; String toUrl="https://cap.cityu.edu.hk/studentlan/deta

Tomson Xu 1万+

信号与系统——卷积、相关运算与FFT关系以及工程应用(三)

卷积运算、相关运算

qq_35028634的博客 6612

从毫米波到计算机视觉:智能座舱监控系统的多模态技术融合

本文探讨了智能座舱监控系统中多模态技术融合的创新应用,涵盖毫米波雷达、红外传感与计算机视觉的协同架构。通过传感器时空对齐、低光照算法突破及隐私保护设计,系统在DMS、OMS等场景实现99.7%的检测准确率,同时优化成本至$45以内,为汽车智能化提供关键技术支撑。

d6e7f8的博客 902

利用HttpClient获得cookie,并在webview中使用的方法

利用HttpClient获得cookie,并在webview中使用的方法

TonyLRX2012的博客 620

S32K3基于EB配置GPT触发WDG的实战解析

本文详细解析了S32K3 MCU基于EB tresos工具配置GPT定时器触发看门狗(WDG)的实战方法。通过分析协同工作机制、MCAL配置步骤及代码实现,帮助开发者构建可靠的硬件监控系统,提升汽车电子系统的安全性与实时性。

f9g0h的博客 205

关于Android 中如何共享原生httpClient获取的cookie并与webView共享

首先是httpclient 获取的cookie,存储全局变量类似于application.sessionCookie=mycookie; httpclient 处cookie是之前定义的成String 并在header中获取。 在webview 处需要无登录获取web内容时:         //同步cookie         CookieSyncManager.createInstan

世界的这一个角落 1660

在Simulink中实现基于深度强化学习的控制算法仿真建模

通过上述步骤,你可以在Simulink中实现基于深度强化学习的控制算法仿真建模。这种方法适用于许多复杂的控制问题,尤其是当传统控制方法难以找到有效解决方案时。随着经验的积累,你可以进一步探索不同的深度强化学习算法及其变种,以适应更广泛的应用场景。此外,还可以结合其他先进技术(如迁移学习、多智能体协作等),提升模型的表现能力。

amy_mhd的博客 415

3、数据导入与清洗:Excel、SQL、SPSS、Stata和SAS数据处理

本文详细介绍了如何从Excel文件、SQL数据库以及SPSS、Stata和SAS等统计软件中导入和清洗数据。针对不同数据来源的特点,提供了具体的处理方法,包括跳过无用行、重命名列、处理缺失值、转换数据类型、保留元数据等关键步骤。同时,通过实际应用案例展示了如何整合多源数据,并总结了数据导入和清洗的最佳实践,帮助读者高效完成数据预处理工作,为后续的数据分析打下坚实基础。

134

android WebView 和 HttpClient cookie同步

首先android5.0 实现了WebView与 框架的自动cookie同步,无需额外操作。 5.0一下版本需要手动同步cookie 方法如下CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.set

u012636086的专栏 1455

YOLOv13保姆级教程+AKConv模块:可变形卷积+自适应核优化,mAP提升3.23%,召回率&mAP50~95显著提升(论文涨点模块已验证)

本文介绍了一种改进的YOLOv13-AKConv模型,通过引入AKConv模块显著提升了目标检测性能。实验结果表明,优化后的模型(绿色曲线)相比原模型(蓝色曲线)在mAP指标上提升了3.23个点,同时召回率、mAP50-95等指标均有明显提升。作者详细阐述了模型移植过程,包括创建yolov13-AKConv.yaml配置文件,修改tasks.py和modules/init.py文件,以及实现AKConv模块的核心代码。该模块采用可变形卷积思想,通过动态生成采样点位置来增强特征提取能力,并集成了BN和SiLU

FJN110的博客 2611

android webview里设置cookie

我们在android中访问网络经常会用到Apache的HttpClient,用此类去访问网络获取数据,  但是在写android界面的时候又时不时的会用到一些WebView组件,这时候访问一个以经登录的页面的时候cookie设置就有个问题  在HttpClient中保存下来的Cookie怎么设置到WebView组件里,让WebView也保持住Cookie状态,也就是登录状态呢? 

coder_nice的专栏 1524

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android WebView登录状态session id 和cookie同步

上次说到的WebView还有一个遇到的比较难一点的问题没有回答上来。主要是关于在用webview的时候无法保存登录状态,下次打开网页还是会打开登录界面。有两三个朋友同时问到我这个问题,而刚刚好我也不懂,也正在学习。而且刚好也找到可以学习的路径并且真实可用。废话少说,先标明出处,小心被打 本文转载自:http://f059074251.iteye.com/blog/2184072 作者:http:

hkq463的博客 4616

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android WebView 与 HttpClient Cookie

1.WebView中的Cookie信息,或者WebView访问某网络地址前设置其Cookie CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(MainActivity.this); cookieSyncManager.sync(); CookieManager cookieM

take8619702的专栏 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android(安卓)WebView设置cookie

最近两天一直想用安卓模拟登陆,利用新的WebView显示登陆后可以访问的页面,但是不管怎么访问需要登陆后才能访问的页面,还是跳回到登陆页,后来网上看了下是cookie没有设置,找了半天才到到合适的设置方法: 登陆方法: private Cookie cookie; public static HttpContext localContext; public static Lis

langyaonet的专栏 3759

Android管理cookie,Android中的cookie管理简介

先看看cookie可能存放的位置1.Httpclient会存储当次请求的cookie内容,存储位置在 httpClient.getCookieStore 但是apache建议自定义cookie存储方式,因为cookiestore把cookie放在arraylist里很容易被系统回收[1]。2.WebView会存储cookie在CookieManager,具体使用方式,后续的文章会讲这里不是重点。正...

weixin_39775106的博客 2195

android webview同步,android httpclient与webview cookie同步

1,在登陆成功的时候定义一个全局变量将cookie缓存起来public static void saveCookie(DefaultHttpClient httpClient,Context content){List cookies = httpClient.getCookieStore().getCookies();Cookie cookie = null;if (!cookies.isEmp...

weixin_34469962的博客 247

android httpclient webview,ANDROID:在Webview和httpclient之间共享会话

我实际上在WebView中记录了会话.但我也使用httpclient来发送和从网络获取数据.我在互联网上看到,无法获取WebView的内容,因此我需要使用我的httpclient从Web服务获取数据.问题是这个webservice使用会话…而我的会话在我的WebView中,所以httpclient没有它,我无法访问webservice的内容.我看到很多关于这个问题的帖子,但我不明白解决方案.这是我...

weixin_28813401的博客 247
上一篇: Android WebView 获取网页数据(html)
下一篇: Android 利用jsoup解析 html
hellohaifei
博客等级 码龄14年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值