webview的postURL以及webview中SessionID同步

Android Webview的postUrl与loadUrl加载页面实例 主要介绍了Android Webview的postUrl与loadUrl加载页面实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

webview的postURL

//第一步:拼接请求参数
 String postData = "username=" + username
                + "&psw=" + psw
                + "&time=" + time
                + "&token=" + token;
//第二步:直接postURl
        webview.postUrl(url
                , EncodingUtils.getBytes(postData, "BASE64"));

不要以为这么简单就完了,坑在第二步的

 EncodingUtils.getBytes(postData, "BASE64"));

你会发现没有这个类,但是在Android的官方文档,却可以看到这个类

这里写图片描述

发现这个类在org.apache.http.util.EncodingUtils
所以你还差一步

 compile 'org.apache.httpcomponents:httpcore:4.4.4'

webview中SessionID同步

首先感谢这篇文章 Android的HttpClient和WebView session不同的问题

场景

  1. 登陆页面使用Android写的

    (登陆接口访问之后,会在服务器生成一个sessionId)

  2. 登陆成功之后,你访问的页面是通过webview来加载的

    (用webview.loadUrl(url)时,服务器会看你有没有sessionId,如果没有,重新分配各你一个sessionId,这就导致了两个sessionId不一致)

  3. 服务器端要通关过sessionId来判断你的登陆情况,不一致的话,认为你没有登陆,从而不能进行登陆后的操作

思路

  1. 当登录以后,把cookie(含session)记录下来,赋值给一个变量
  2. 当使用webview.loadUrl(url)时候,先在该webview所在的Activity里把这个cookie添加进来,这样当webview.loadUrl(url)时,就会把这个cookie(含session)传给服务器,让服务器认为你在登陆状态中的操作

代码

第一步、拿到cookie

上面说的第一步得到cookie,根据你使用的网络框架不同,会有所不同,这里拿retrofit(其本质是okhttp)举例子

下面的代码同时实现了每次使用retrofit请求时,都同步了cookie,也就是说如果你登录时用retrofit请求产生了一个cookie,第二次打开的虽然是Android写的页面,但是再一次retrofit请求时也会产生一个cookie,两次cookie不一致,会导致认为你没登陆

//先配置OkHttpClient
  OkHttpClient client = new OkHttpClient.Builder()
                .cookieJar(new CookieJar() {
                    private final HashMap<HttpUrl, List<Cookie>> cookieStore = new HashMap<>();

                    @Override
                    public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
                    //这里把cookies存起来
                        cookieStore.put(url, cookies);
                        if (!cookies.isEmpty()) {
                            for (int i = 0; i < cookies.size(); i++) {
                               //拿到了cookie,把他赋值给了MyApp.cookie
                                MyApp.cookie = cookies.get(i);
                            }
                        }
                    }

                    @Override
                    public List<Cookie> loadForRequest(HttpUrl url) {
                        List<Cookie> cookies = cookieStore.get(url);
                        //这里把第一次拿到的cookies赋值给cookies,这样就保证了每次请求服务器,都是相同的cookies
                        return cookies != null ? cookies : new ArrayList<Cookie>();
                    }
                }).build();


//      retrofit可以配置okhttp、解析方式、支持RxJava等
        Retrofit retrofit = new Retrofit.Builder()
                .client(client)//使用了上面的同步cookie策略
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl(UrlUtils.BASE_URL)
                .build();
第二步、把cookie设置给webview所在的Activity(在webview.loadUrl(url)之前)

public class extends   extends BaseActivity{ 

..............
/**
     * 为了保证session的一致性,当登陆访问服务器后,会生成一个cookie,
     * 把这个cookie赋值给MyApp.cookie
     * 在这里又把MyApp.cookie赋值给这个Activity,
     * 从而使得在这个Activity里面的webview在loadurl时候也用这个cookie(内含sessionID)
     */
    private void synchSessionID() {

        Cookie sessionCookie = MyApp.cookie;    //这里的cookie就是上面保存的cookie
        CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();
        if (sessionCookie != null) {
            cookieManager.removeSessionCookie();
            String cookieString = sessionCookie.name() + "=" + sessionCookie.value() + "; domain=" + sessionCookie.domain();
            cookieManager.setCookie(UrlUtils.BASE_URL, cookieString);
            Log.e("qqq", cookieString);
            CookieSyncManager.getInstance().sync();
        }
    }
    .................
}

其他参考

  1. 【WebView的cookie机制 】轻松搞定WebView cookie同步问题
  2. android HttpClient+WebView 同步sessionId 和cookie
  3. android实现session登录保持
  4. Retrofit2.0 完美同步Cookie实现免登录
  5. Android利用Cookie实现码源登录效果
  6. Retrofit+OKHttp 教你怎么持久化管理 Cookie
使用 Java + PaddleOCR 实现表格识别,支持导出 HTML 和 Excel(附源码) 使用Java+PaddleOCR快速搭建表格识别系统,无需处理底层模型细节。系统支持表格结构识别和内容识别,可将图片转换为可编辑表格格式。文章提供了完整的实现流程,包括Maven依赖引入、模型下载(包含检测、识别、分类和表格结构模型)及参数配置说明。SmartJavaAI支持多种高性能模型选择,适用于不同应用场景,帮助开发者快速实现表格识别功能。 阅读详情

相关推荐

AD4030-24BBCZ详细资料 Analog Devices 模数转换器 - ADC 24-Bit, 2 MSPS, SAR ADC

AD4030-24BBCZ详细资料  Analog Devices 模数转换器 - ADC 24-Bit, 2 MSPS, SAR ADC

Chen_YYan的博客 794

WebView进行post请求

大多数情况下我们一般用WebView去加载一个界面就行了,但是有时候你想要进行post请求,比如你抓取到提交参数,想模拟一些pc端浏览器的请求,比如123306火车票.那要怎么做呢?抓取的参数如下:代码类似于下面:StringBuilder builder1 = new StringBuilder(); try {//拼接post提交参数 builder1.append("interfaceNa

夏洛克的猫 1万+

Python爬虫实战:绕过B站-352风控的完整解决方案

网络爬虫技术是数据采集和自动化测试的重要工具,其核心原理是通过模拟HTTP请求获取网页数据。在实践过程中,开发者常会遇到网站反爬机制,这涉及请求指纹识别、IP行为分析等安全技术。这些风控措施的价值在于保护网站数据安全和服务器资源,广泛应用于电商、社交、内容平台等场景。针对B站等平台的-352风控错误,需要综合运用请求头伪装、会话管理、参数签名破解等技术方案。本文重点探讨如何通过构建完整的浏览器级请求头、管理Cookie会话、以及使用Playwright等浏览器自动化工具,有效解决Python爬虫在B站数据采

weixin_33912638的博客 400

使用WebView进行postUrl请求发送参数过程中数据丢失或错误的问题。

这几天在使用webview进行postUrl的时候出现参数丢失的问题。 最近公司的项目,进行对接第三方支付。具体流程是客户端请求后台接口,把后台返回的参数拼接到Url后与第三方支付进行交互,用webview展示第三方的页面,webview需要post来传递一些参数: String HfSubmitUrl = mBody.getHfSubmitUrl(); String HfPostDat

大硕的博客 6759

保姆级教程:用+86手机号成功注册Discord的三种亲测方法(附节点选择技巧)

本文提供了三种经过验证的方法,帮助用户使用+86手机号成功注册Discord,包括号码格式调整、网络环境优化和设备组合方案。同时详细解析了'手机号无效'报错的深层原因,并附上节点选择技巧,确保注册流程顺利。

weixin_42683394的博客 1912

保姆级教程:2025新版JavPlayer 3.01整合修复版安装配置全流程(N卡/A卡/CPU通用)

本文提供2025新版JavPlayer 3.01整合修复版的保姆级安装配置教程,涵盖N卡、A卡和CPU环境。详细讲解硬件要求、分步安装流程、显卡优化配置及超分辨率模型选择,帮助用户高效完成视频修复任务。

weixin_42665255的博客 1885

webview 上 postUrl 发送参数过程中数据丢失或错误 的问题

这几天在数据访问中加入了加密

raining_heart的专栏 1万+

CenterPoint 工程复现

CenterPoint 工程复现,本文中使用版本:BEVerse工程下的mmdet3d (`MMDet3d v0.17.3`)版本,MMDetection3D中其他版本的使用`大同小异`。

Darchan的博客 5663

WebView内使用post加载url并添加header

最近项目内需求,使用WebView加载网页,加载网页的时候需要post参数去让网页生成数据,还要在头部添加一个

博学之,审问之,慎思之,明辨之,笃行之 1万+

【ComfyUI 基础教程】ComfyUI 局部重绘工作流教程

本篇指南将带你了解 ComfyUI 中的局部重绘工作流,并带你完成一个局部重绘的示例,以及遮罩编辑器的使用等。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 303

从登录到应用可见:在 SAP S/4HANA Cloud Private Edition 中创建用户与打通 SAP Fiori 权限的完整思路

在SAP S/4HANA系统中,用户创建远非简单的账号开通,而是涉及认证、授权、数据访问等多维度的复杂过程。用户主数据记录(User Master Record)是系统访问的起点,包含登录方式、角色分配等关键信息。认证解决"你是谁"的问题,授权则决定"你能做什么"。SAP Fiori访问链路涉及Launchpad内容分配、应用启动映射、OData服务权限等多层校验。角色(Role)通过PFCG维护,包含业务目录(Catalog)和空间(Space)等元素,共同构成完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 149

android webview loadurl posturl,Android Webview的postUrl与loadUrl加载页面实例

关于Android的webview,用过的想必都不会陌生。这里我就不说webview的基本用法了,想要知道的可以去网上百多,有很多介绍webview基本用法的。本文要介绍的主要是在项目过程中使用webview的postUrl遇到的坑。1、使用场景如下:webview在加载H5链接时,默认是使用loadUrl进行加载,如果你设置了缓存属性(进行缓存),在显示的H5页面内点击跳转到另外一个页面后,按回...

weixin_42314860的博客 834

二维矩形件排样算法之最低水平线算法实现

最低水平线算法的简单实现(Python) 1、二维矩形排样算法众多,最早的有BL算法、下台阶算法、最低水平线算法等,其中最低水平线算法及其优化算法应用较多,是与智能优化算法(遗传算法、模拟退火算法等)结合的最多的算法,本文利用python对最低水平线算法做了实现...

峰爸的博客 1万+

Android Webview的postUrl与loadUrl加载页面

项目过程中使用webview的postUrl遇到的坑

爅烆的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

webview

参考:http://developer.android.com/guide/webapps/webview.html webview就是一个组件,可以和textview一样使用。可以调用loadUrl("http://www.baidu.com")进行加载指定了url的网页。 当加载一个界面后,点击其中的链接,会调用系统的浏览器进行访问。如果想要用自己的webview访问,可以设置webvie

飞鸟 1135

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

webView.post

webView.post(new Runnable() { @Override public void run() { Log.e("getLocationData", "S13332步数=" + totalStep); webView.loadUrl("javascript:syncSportData ('" + totalStep + "')...

qq_32897275的博客 952

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android webView 使用postUrl注意事项

最近做的项目使用了Webview  需要post一些数据 1.经历       获取服务端的数据之后,进行解析,然后拼凑成 key=value&key=value.........的字符串,然后转成字节数组    WebView.postUrl (url, postData);        原本以为很完美,然而,webview界面上毛都没有显示。        扣了半天脚,写了一

小牛的专栏 8515

Android WebView使用总结

1 . 加载网页:               网络用:webView.loadUrl("http://www.baidu.com");               本地文件用:webView.loadUrl(file:///android_asset/XXX.html);这里的格式是固定的,文件位置 assets目录下               webview.postUrl(S

Juns_619930524的博客 377

使用WebView的注意事项(加载视频播放页)

如下是最近在搞webview播放视频,全屏切换需求的总结,供同仁参考,避免踩坑,提高工作效率,早点下班,丰富个人生活! webview生命周期方法 应用前后台切换时,相应Activity生命周期方法中要调用webview的onResume与onResume的方法,否则应从前台切换到后台后视频还是在播放的,还有声音的。 loadUrl与postUrl的区别 loadUrl与PostUrl的最...

技术的学习与积累是个技术活 3905

android webview loadurl posturl,WebView以POST方式加载URL

一般情况下,调用WebView.loadUrl(url)方法即可加载需要展示的Html页面了,如果需要传参数的话,我们也可以把参数拼在url后面(像这样http://www.baidu.com/s?word=WebView),一并传给服务端。但有时候情况比较特殊,比方说,请求页面的时候我们还想通过post方式传一些参数过去,这个时候直接调用上述方法就不行了。这个时候该怎么办呢?这里讲一个开发中的小...

weixin_35781693的博客 1524

WebView post请求

webview提供了几种加载网页的方法: view. loadUrl() 1.1 view.loadUrl(String url)直接传入网页地址 1.2 view.loadUrl(String url, Map<String, String> additionalHttpHeaders)可 以添加请求头 view. loadDataWithBaseURL(String b...

Mr.康的博客 2000

WebView利用UserAgent传递SESSIONID

mWebView.getSettings().setUserAgentString(mWebView.getSettings().getUserAgentString()+"SESSIONID="+"123456");

v5browser 193

【android】WebView使用Post请求和设置浏览器弹框

这里要注意:post请求参数只能传byte数组,而且必须是键值对字符串形式的byte数组,其中的key是后台服务器接收key,后台规定key是什么值就是什么值,不能随意更改,没有key=value格式或者key不正确,都会请求不到数据网页打不开。 下面代码直接看initWebView()方法就好 package com.xxxxx.xxx.activity.

止水 1万+

android webView的使用

昨天,自己用到了webView加载本地文件的内容,当时有很多内容忘记了,所以在网上查找了资料。今天,自己又查找了webview的资料,把这个知识点记录一下,避免以后再去查找资料。         1. 简介 WebView是一个基于webkit引擎、展现web页面的控件。 Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使

谢岩的博客 610
上一篇: 说说泛型
下一篇: 蓝牙(WLAN)扫描发现设备在6.0以上的bug
Android_Study_OK
博客等级 码龄11年 91粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值