安卓开发——如何获取网站的cookie,并将cookie发送到服务器端

6 篇文章 1 订阅
订阅专栏

一、思路

首先我创建两个活动,一个是MainActivity做主活动,另一个是WebActivity用来加载网页。网页加载完毕后,再回到主界面,通过WebViewClient内部的方法获得cookies。再通过正则表达式,将我们需要的字符串筛选出来。最终发送请求。
在这里插入图片描述

二、利用WebView加载网页,并获取cookie

思路:
创建一个私有类MyWebViewClient,继承WebViewClient类

private class MyWebViewClient extends WebViewClient {

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            webview.loadUrl(url);
            return true;
        }

        public void onPageFinished(WebView view, String url) {
            CookieManager cookieManager = CookieManager.getInstance();
            String CookieStr = cookieManager.getCookie(url);
            Log.e("song", "Cookies = " + CookieStr);
            super.onPageFinished(view, url);
        }

    }

再按钮点击事件中new一个MyWebViewClient的实例对象,然后调用对象中的onPageFinished方法

注:getCK是一个获取cookie的按钮对象
 getCk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(key!=null)
                {
                    Toast.makeText(MainActivity.this,"请先登录京东", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    MyWebViewClient myweb=new MyWebViewClient();//创建实例对象
                    String url = "url";//url就是你登录的网站
                    myweb.onPageFinished(webView,url);//调用私有类的方法
                }

            }
        });

三、用正则表达式从cookie中提取有用的字符串

1.首先你需要测试你的正则表达式正确与否,直接在网上搜索正则表达式测试工具。
2.在Java中使用正则表达式
创建pattern对象,执行查找,判断是否找到匹配的字符串,将匹配的字符串保存(有可能找到多个结果,用字符串数组保存)

String pattern = "(pt)(.*?)(;)";//创建pattern对象
Matcher matcher = Pattern.compile(pattern).matcher(CookieStr);//这里是临时的cookie,匹配cookie字符串
String[] numbers={"","",""};
int i=0;
while(matcher.find()) {
    Log.e("match",matcher.group());
    numbers[i]=matcher.group();
    ++i;
    if(i>=3)break;//将结果都保存下来,就跳出循环
}

3.可以在获得cookie之后就进行筛选,结合如下

 private class MyWebViewClient extends WebViewClient {

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        public void onPageFinished(WebView view, String url) {
            CookieManager cookieManager = CookieManager.getInstance();
            String CookieStr = cookieManager.getCookie(url);
            Log.e("sunzn", "Cookies = " + CookieStr);
            String pattern = "(pt)(.*?)(;)";
            Matcher matcher = Pattern.compile(pattern).matcher(CookieStr);//这里是临时的cookie
            String[] numbers={"","",""};
            int i=0;
            while(matcher.find()) {
                Log.e("match",matcher.group());
                numbers[i]=matcher.group();
                ++i;
                if(i>=3)break;
                //display.setText(matcher.group());
            }
            key =numbers[0];
            pin =numbers[1];
            display.setText(key +"\n"+ pin);//将筛选后的结果显示到Textview,diaplay是一个Textview对象
            super.onPageFinished(view, url);
        }

    }

四、把最终的字符串通过HttpURLConnection的POST方法发送到服务器

思路:
1.定义一个sendPostMessage方法,用来发送消息,参数是需要发送的字符串,编码方式,网址。(将方法定义成静态方法,无需要对象即可直接调用

public static String sendPostMessage(String params,String encode,String address){
        StringBuffer buffer = new StringBuffer();//创建缓冲区,当传输数据多的时候可以用
        try {//把请求的主体写入正文!!
            URL url = new URL(address);//创建URL对象
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(3000);
            connection.setDoInput(true);//表示从服务器获取数据
            connection.setDoOutput(true);//表示向服务器写数据
            //获得上传信息的字节大小以及长度
            connection.setRequestMethod("POST");
            String method=connection.getRequestMethod();
            //是否使用缓存
            connection.setUseCaches(false);
            //表示设置请求体的类型是文本类型
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

           // connection.setRequestProperty("Content-Length", String.valueOf(mydata.length));
            connection.connect();   //连接,不写也可以
            //获得输出流,向服务器输出数据
            PrintWriter pw = new PrintWriter(connection.getOutputStream());
            pw.print(params);//用PrintWriter 对象可以直接写入字符串
            pw.flush();
            pw.close();
            //获得服务器响应的结果和状态码
            int responseCode = connection.getResponseCode();
            if(responseCode == HttpURLConnection.HTTP_OK){
                //return changeInputeStream(connection.getInputStream(),encode);
                return "connect success";

            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return "";
    }

2.发送请求的点击事件中调用sendPostMessage方法()。
注:由于发送网络请求是一个耗时的操作,所以通过在点击事件中创建子线程进行发送请求。(不能在子线程的run方法中放按钮的点击事件)

bsend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){
                    @Override
                    public void run() {
                        String params;
                        params="XXXXXXX";
                        String result = sendPostMessage(params,"utf-8",url);
                        System.out.println("result->"+result);//输出发送消息成功后的响应
                    }
                }.start();
            }
        });

五、使用HttpURLConnection发送请求的注意事项

1.如果请求没有发送成功应该怎么排查问题
①先判断发送的网址是否正确
②发送的字符串是否正确
③开发环境是否支持你使用的方法,该导的包是否导了
④有没有在AndroidManifest.xml文件声明开启网络权限

<uses-permission android:name="android.permission.INTERNET" />

⑤如果上述都没问题,就是代码逻辑问题。一步步Debug查看
2.使用HttpURLConnection发送请求的注意事项{
因为Android 6.0开始引入了对Https的推荐支持,与以往不同,Android 9.0的系统上面默认所有Http的请求都被阻止了。
解决办法:
①在res文件夹创建xml文件夹,然后在xml文件夹下创建network_security_config.xml文件

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

在这里插入图片描述
②在AndroidManifest.xml文件中声明以下两句

<application
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/network_security_config"
</application>

在这里插入图片描述
3.测试post请求: 在线测试网络请求

或者使用postman.

【RPA】自动提取安卓APP应用COOKIE并提交后端分析使用
飞~
04-26 447
安装ProxyPin,这里要将ssl证书安装好,否则部分https数据包抓不到,打开需要抓包的app,测试抓包是否正常。设置过滤规则(app+域名),方便观察抓包数据。添加脚本将抓到的数据提交至后端应用程序。1、红米NOTE5(安卓设备都可以)编写autoxjs自动化脚本,参照。二、后端接收处理数据。
关于android如何对cookie的读取!
伟子男的专栏
09-16 1万+
今天做项目时需要用到cookie读取,于是就乘机学习了下。 1.首先客户端登录成功后会得到一个cookie ,需要把这个cookie保存到本地,然后后面需要请求时加到head。 2.我用的是sharePreference保存key的。 /** * 保存Cookie */ public static void savePreference(Context context,Stri
android 获取cookies,Android-登录Webvi后提取Cookie
weixin_28932617的博客
05-27 495
我有一个在Web视图中打开URL的应用程序,然后用户必须通过Web视图登录到站点并在登录后收到cookie。我在登录后获取cookie时遇到问题。问题是,我可以使用android.webkit.CookieManager来实现这一点,并在单个字符串中输出所有cookie。但是,我想使用cookie存储(如java.net.CookieStore中)来实现它,所以我需要使用java.net.Cook...
Android用户操作web后台登录后获取cookie安全通行证认知
weixin_34367257的博客
09-24 172
为什么80%的码农都做不了架构师?>>> ...
67 cookie常用方法
歌谣的博客
10-07 225
Android应用开发中使用Cookie
linghu_java的专栏
05-07 1万+
<br />       Cookie是网景公司发明的,为了网站服务器端辨别用户的身份,保持session会话而保存到用户本地磁盘上的用户数据,该数据是经过加密的。Cookie是由服务器端生成,发送给客户端的(User-Agent一般是浏览器),客户端浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送Cookie给服务器(前提是浏览器必须设置启用了cookie),服务器就可以知道该用户是否合法用户以及是否需要重新登录等。<br />代码如下:<br />pu
PHP如何获取Cookie并实现模拟登录
10-15
以下是如何使用cURL获取Cookie并将它们保存到文件中的示例: ```php $url = "http://1.2.3.4/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch,...
cookiejavascript中的使用技巧以及隐私在服务器端的设置
01-19
一个网站cookie字符串包含了该站点域名下的所有cookie(javascript 可访问的,不包括 httponly 的cookie ),多个cookie之间用分号和一个空格隔开,最多一般是 20个或50个,例如,包含2个cookie的字符串格式为 ...
python获取服务器响应cookie的实例
09-19
今天小编就为大家分享一篇python获取服务器响应cookie的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
python2.7版本 调用登录接口获取cookie并 将cookie获取传入到其他接口案例
03-08
python2.7版本 调用登录接口获取cookie并 将cookie获取传入到其他接口案例。。。 python交流群:711607680
android cookie获取和设置,webView的cookie的同步
05-25
httpClient请求和服务器session保持同步,webView对cookie的管理
Android下登录Demo(使用了读写Cookie操作)
01-31
Android中读写Cookie实例,包含两个demo:登录时将服务端Cookie写入本地文件,访问列表时附带本地Cookie去请求列表,并打印出来。
Android开发——webview获取H5的Cookie并保存在本地
u013704970的专栏
12-19 1万+
最近项目遇到一个新需求,H5的登录态跟APP的登录态分开,所以需要记住H5的登录状态,但是我的webview app已退出再次打开cookie就被清空(这个找了很久也没会找到原因)。我的解决方法是:获取H5的cookie,保存在本地数据库,·再次进入webview判断是否有Cookie,如果没有,从本地数据库取出Cookie并设置给webview。     webview管理cookie的机制:
如何爬取手机端cookie
m0_37969932的博客
06-19 6716
什么是cookies Cookie,有时也用其复数形式Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。 通俗来说, ...
Android如何使用读写cookie的方法
Dream It Possible
03-24 1万+
http://www.cnblogs.com/cosiray/archive/2012/06/25/2562117.html 可以使用SharedPreferences或者SQLite来保存用户信息 private static HashMap  CookieContiner=new HashMap() ;     /** * 保存Cookie * @param resp */
按键 使用WinHttp实现POST方式用户模拟登录网站
热门推荐
王乐平 技术博客
03-02 2万+
引言这往篇文章是我以前在一个论坛里写的,今天把这篇文章转移到这里。 文章主要介绍了如何模拟一个网站的登录。 这里使用的辅助工具是按键精灵,编程语言类似于VB。实现步骤第一步,获取登录地址打开登录界面: 打开调试工具,点击登录按钮,查看数据信息: 从调试工具中可以看到实际登录地址和需要提交的参数。第二步,获取验证码地址第三步,在浏览器中正常登录,查看登录成功和失败后返回的信息(方便后边进行
如何将在服务器端创建的cookie对象发送到浏览器端
最新发布
05-25
服务器端,可以使用HTTP响应头中的"Set-Cookie"字段来创建一个新的cookie并将其发送到客户端浏览器。以下是一个示例Python代码: ```python from http import cookies from http.server import BaseHTTPRequestHandler class MyHandler(BaseHTTPRequestHandler): def do_GET(self): # 创建一个新的cookie c = cookies.SimpleCookie() c['my_cookie'] = '1234567890' # 将cookie添加到响应头中 self.send_response(200) self.send_header('Set-Cookie', c.output(header='')) self.end_headers() # 返回响应内容 self.wfile.write(b'Hello, world!') ``` 在这个示例中,我们创建了一个名为"my_cookie"的新cookie,并将其值设置为"1234567890"。然后,我们将cookie添加到HTTP响应头中,并在响应正文中返回一个简单的"Hello, world!"消息。 当客户端浏览器收到这个响应时,它会检查响应头中的"Set-Cookie"字段,并将其中的cookie保存在本地。下次浏览器向服务器发送请求时,它会在请求头中包含该cookie,以便服务器可以识别用户并提供个性化服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • idea怎么把自己的项目打包成jar包 16848
  • vscode离线下载对应版本的插件,避免版本兼容问题 14287
  • Linux的三种配置 IP方法 12903
  • 怎么给idea配置Tomcat 6952
  • C++字符串-输出字符串的每个字符 5971

分类专栏

  • Linux学习笔记 15篇
  • C语言 4篇
  • 科技故事
  • 基础设施-运维 3篇
  • 计算机网络 1篇
  • 巧妙理解计算机组成结构 1篇
  • 那些神秘的计算机部件 1篇
  • C++之STL标准库 9篇
  • 操作系统 4篇
  • Git笔记 2篇
  • DevOps 3篇
  • 常见问题及解决办法 2篇
  • C++基础知识 3篇
  • 生活杂谈 1篇
  • Makefile学习笔记 1篇
  • QT开发 1篇
  • 安卓开发实战 6篇
  • 生活感悟分享 2篇
  • JavaWeb课程学习笔记 4篇
  • 微信小程序 2篇
  • 数据库操作与数据结构 1篇
  • 音视频特效处理 2篇
  • 数字图像处理 1篇

最新评论

  • vscode离线下载对应版本的插件,避免版本兼容问题

    qq_39236287: 具体怎么操作呀

  • windows系统如何将github的仓库文件clone到本地

    西里小诸葛: 设置用户名和邮箱是为了,在多个开发者提交的时候识别是谁提交改动的代码,不设置应该也可以克隆,只要ssh密钥有拷贝到github的设置中

  • windows系统如何将github的仓库文件clone到本地

    jxwild: 大侠,我记得以前clone都不需要设置用户名和密码.怎么现在第一次克隆的时候要设置用户名和用户邮箱?是变了吗

  • 用idea建立第一个网站

    西里小诸葛: 其他人要访问,你需要部署在服务器上,

  • 用idea建立第一个网站

    西里小诸葛: 不可以的,这个是在本地的。localhost8080

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 非Root用户编译C程序如何生成Core文件
  • 流畅切换Linux的应用程序
  • 网络转发速度的热知识
2024年14篇
2023年4篇
2022年20篇
2021年24篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西里小诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

哆哆女性网188号段螳螂吃什么文艺公司名字起名大全企业起名专家幻想曹操传下载给李女宝宝起名水菜丽番号命运天盘日历2021年日历表公司起名网免费取名网access破解版下载家庭出身是什么辰己唯两个人合伙注册公司怎么起名字热情的反义词给项目起名字1518起姓名打分测试千里香馄饨加盟崔姓男孩起名大全男孩宝宝起乳名猪年婴儿虚怀若谷什么意思圣斗士星矢国语版起名称100分wodedy周易八字起名小孩生辰起名6月16餐饮业店怎么起名如何给农资公司起名字舟夜书所见古诗带拼音淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化