最近对android的webkit的cookies进行学习,下面是我的简单总结:
1,CookiesManager.java-->CookiesSyncManager.java-->WebviewDatabases.java
CookiesManager.java是对cookies的总体管理,它会调用CookiesSyncManager将Ram里面的Cookies存入到databases.所以CookiesSyncManager是对将cookies同步到database的管理,而WebviewDatabases里面的Webview.db的cookies表是对cookies的存储。
2,CookiesSyncManager.java-->WebSyncManager.java
CookiesSyncManager里面正在维护cookies从ram到databases的是WebSyncManager来做的,这里面是开一个thread来维护。
3,JWebCoreJavaBridge.java-->CookiesSyncManager.java
CookiesManager是对cookies的总体管理,那ram的cookies首先是这里传递给CookiesSyncManager的。那个CookiesManager的ram cookies又是从何处得来的呢?那就是从JWebCoreJavaBridge得到的。
private void setCookies(String url, String docUrl, String value) {
if (value.contains("\r") || value.contains("\n")) {
// for security reason, filter out '\r' and '\n' from the cookie
int size = value.length();
StringBuilder buffer = new StringBuilder(size);
int i = 0;
while (i != -1 && i < size) {
int ir = value.indexOf('\r', i);
int in = value.indexOf('\n', i);
int newi = (ir == -1) ? in : (in == -1 ? ir : (ir < in ? ir
: in));
if (newi > i) {
buffer.append(value.subSequence(i, newi));
} else if (newi == -1) {
buffer.append(value.subSequence(i, size));
break;
}
i = newi + 1;
}
value = buffer.toString();
}
CookieManager.getInstance().setCookie(url, value);
}
CookieManager.getInstance().setCookie(url, value);
4,JavaBridge.cpp-->JWebCoreJavaBridge.java
JWebCoreJavaBridge的cookies是从JavaBridge.cpp得来的
void
JavaBridge::setCookies(WebCore::KURL const& url, WebCore::KURL const& docUrl, WebCore::String const& value)
{
JNIEnv* env = JSC::Bindings::getJNIEnv();
const WebCore::String& urlStr = url.string();
jstring jUrlStr = env->NewString(urlStr.characters(), urlStr.length());
const WebCore::String& docUrlStr = docUrl.string();
jstring jDocUrlStr = env->NewString(docUrlStr.characters(), docUrlStr.length());
jstring jValueStr = env->NewString(value.characters(), value.length());
AutoJObject obj = getRealObject(env, mJavaObject);
env->CallVoidMethod(obj.get(), mSetCookies, jUrlStr, jDocUrlStr, jValueStr);
env->DeleteLocalRef(jUrlStr);
env->DeleteLocalRef(jDocUrlStr);
env->DeleteLocalRef(jValueStr);
}
mSetCookies = env->GetMethodID(clazz, "setCookies", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
env->CallVoidMethod(obj.get(), mSetCookies, jUrlStr, jDocUrlStr, jValueStr);
5,CookieClient.h-->JavaBridge.cpp
JavaBridger.cpp是继承CookiesClient
6,Cookies.cpp-->CookiesClien.h
就分析到这里,就没往下追了,有空我继续分析。
分享到:
相关推荐
本篇将深入探讨如何使用Python来解决此类问题,通过实际操作案例和框架应用来提供解决方案。 首先,403错误可能由于多种原因产生,如浏览器cookies问题、服务器端的权限设置、使用了禁止的HTTP头、或者尝试访问的...
本篇将深入探讨如何解决这个问题。 首先,我们需要了解403错误的原因。常见的原因包括: 1. **缺少头部信息**:网站可能会检查请求头中的User-Agent,如果识别为爬虫,可能会禁止访问。 2. **IP被限制**:频繁的...
#### 一、基础知识篇 **1. Http Header之User-Agent** - **定义**: User-Agent(用户代理)是HTTP请求头部的一个字段,用于标识客户端软件的一些基本信息,如浏览器类型、操作系统等。这些信息有助于服务器识别...
本篇文章将详细讲解如何利用编程技术实现抓取速卖通商品信息的完整源码,帮助你掌握这一实用技能。 首先,我们需要了解速卖通的商品页面结构。速卖通是阿里巴巴集团旗下的全球B2C电商平台,其商品页面包含大量丰富...
Python爬虫技术是数据获取的重要手段,特别是在大数据时代,它被广泛应用于数据分析、网站信息抓取等领域。在Python中,`requests`库是进行HTTP请求的首选工具,它提供了简单易用的接口来发送GET、POST等不同类型的...
x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"); httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded"); ``` 4. **设置请求体**:POST请求通常包含表单...
### Python常用模块之requests模块用法分析 #### 概述 `requests`是Python中一个非常流行的库,用于处理HTTP请求。它简化了许多常见的HTTP任务,例如GET和POST请求,并且支持用户认证、自动解压等特性。这篇文章将...
本篇文章将详细介绍如何使用Python中的`requests`库来实现对人人影视网站的自动登录过程,并完成相应的操作,如签到等。 #### 二、准备工作 在开始之前,请确保已经安装了Python环境以及`requests`库。如果尚未...
本篇内容将围绕如何使用Python 3.4来实现一个简单的网页抓取爬虫进行详细介绍。 #### 一、概述 在介绍具体的代码实现之前,我们先了解一下网页抓取的基本概念和技术要点。 **1.1 网页抓取基础** 网页抓取是指从...
WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"} ``` 或使用`fake_useragent`库: ```python from fake_useragent import UserAgent ua = UserAgent() headers = {"User-...