httpclient模拟登陆(使用js设置cookie)

来源:互联网 发布:梦龙网络计划横道图 编辑:程序博客网 时间:2024/05/12 03:50

最近做智能终端课的大程,要在android上利用httpclient模拟登陆学校的bbs,因为网络、html协议、脚本语言都还没学,所以查看了很多东西,可算弄出来了。

模拟登陆之前也做过,但是上次的bbs是通过服务器返回的响应(response)的header中set-cookie设置下次访问的cookie,在这种情况下httpclient是可以自动管理cookie的,因此只要先post登陆的表单,然后就可以访问要访问的网页。但这次*河蟹*的学校bbs是通过js来设置cookie的,这时就要自己设置httpclient的cookie。而且她喵的httpclient的前后兼容性不是很好,网上大多数都是基于httpclient 3.1版的,我在官网上找到的教程是4.3版,但android内嵌的httpclient是4.0版的(据说),害我弄了半天啊啊啊啊!!!3.1版的就不说了,就说说我在android(httpclient 4.0版)和在java se(4.3)上用的方法。

比如,学校bbs登陆成功后返回的信息

<html><meta http-equiv='Content-Type' content='text/html; charset=gb2312'><link rel=stylesheet type=text/css href='/bbs.css'><script>document.cookie='utmpnum=51;path=/;domain=.' + window.location.host</script><script>document.cookie='utmpkey=20154732;path=/;domain=.' + window.location.host</script><script>document.cookie='utmpuserid=yay;path=/;domain=.' + window.location.host</script><meta http-equiv='Refresh' content='0; url=/firstpage.php'>

h4ttpclient  4.3:

最简单的方法就是通过得到的cookie定制一个httpclient,根据上面的例子,方法如下:

CookieStore cookieStore =  new BasicCookieStore();for (int i = 0; i < 3; i++) {String name;String value;int flag=s.indexOf("document.cookie");s=s.substring(flag+17);flag=s.indexOf('=');name=s.substring(0, flag);value=s.substring(flag+1, s.indexOf(';'));BasicClientCookie cookie = new BasicClientCookie(name,value);cookie.setVersion(0);cookie.setDomain(".www.zju88.org");  //这个网址对应的是window.location.host的返回值cookie.setPath("/");cookieStore.addCookie(cookie);}// Set the storeCloseableHttpClient httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();

android:

我找了半天也没找到上面方法对应的API,只能在每次访问前加cookie了

String cookie="";for (int i = 0; i < 3; i++) {String name;String value;int flag=s.indexOf("document.cookie");s=s.substring(flag+17);flag=s.indexOf('=');name=s.substring(0, flag);value=s.substring(flag+1, s.indexOf(';'));cookie +=name +"="+value;if(i!=2)cookie+=";";}/* * 每次访问网络 */HttpGet httpget = new HttpGet(url);httpget.addHeader("Cookie",cookie);//如果httpclient中已经有cookie可能需要设置httpclient的cookie策略,具体可查官方API (:HttpResponse response = httpclient.execute(httpget);


ps:如果是用java SE,也可以使用htmlunit类,它会执行js。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 cpu超过主板功率怎么办 手机游戏下不了怎么办 硬件系统不兼容怎么办 系统主板不兼容怎么办 安装软件不兼容怎么办 win10驱动不尖锐怎么办 苹果内存太小怎么办 内存太小怎么办手机 苹果手机屏幕不能滑动怎么办 vivo手机软件不兼容怎么办 微信无法录音怎么办 手机卡住了怎么办vivo 好钱包闪退怎么办 闲鱼认证失败怎么办 闲鱼买了假门票怎么办 买黄金买到假的怎么办 闲鱼被买家骗了怎么办 闲鱼上小视频没法保存怎么办 qq空间无法查看怎么办 华为手机电池不耐用怎么办 内内被动过怎么办 hp电脑开机黑屏怎么办 网上开店快递费怎么办 保温杯外壳掉漆怎么办 拖鞋前面磨脚怎么办 塑料拖鞋磨脚怎么办 路由器进不去设置界面怎么办 手机号丢了微信登不上怎么办 电脑总是闪黑屏怎么办 支付宝破产钱怎么办 淘宝号码注册过怎么办 农行k宝怎么办信用卡 电脑页面无法显示怎么办 对方银行停止收款怎么办 淘宝东西买太多怎么办 淘宝号黑号了怎么办… 中通包裹异常怎么办 包裹退回去了怎么办 qq支付密码错误怎么办 ie8出现闪退怎么办 平板输不了密码怎么办