模拟登陆webqq总结(二)
上一篇已经做完了模拟登陆的第一步,此时我们已经获得了一个如下的反馈结果(由getmethod.getResponsebodyAsStream()获得的)
ptuiCB('0','0','http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=*****&service=login&nodirect=0&ptsig=EcdwAqGL*9dYTHWCkkffQAQcr-2nO81*FSRjkPOVRi4_&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0®master=0&pt_login_type=1&pt_aid=0&pt_aaid=0&pt_light=0','0','登录成功!', '*****);
同时,我们也收到了服务器反馈的cookie。
接下来我们就要看看在第一次登陆成功之后浏览器又做了哪些事情,才完成第二次登陆。
由图可以看出,浏览器在第一次登陆后又访问了一个地址,不难发现,这个地址就是第一次登陆反馈结果中的第三个参数。
既然这样,那么我们再写一个get请求,请求一下这个地址就可以了。我当时也是这么想的,没太当回事,但是当我写了一个get进行请求的时候,却总是给我返回一些乱七八糟的内容,正常情况下访问这个地址得到的内容是空的(如图)
同时我们还将得到另外三个重要的cookie,如下图。
多次尝试仍未得到正确结果之后,我把链接直接复制到浏览器,访问后发现是如下图的结果
然后我用重新写了个测试程序直接请求这个地址,也得到了上图的反馈,但是用原来的程序就是一些乱七八糟的信息,经过一番对比才发现,原来程序中,我为了偷懒,不想重复设置getmethod的请求头,直接利用getmethod.setURI(new URI(url))的方法重新设置getmethod的地址,而不是从新new一个getmethod,这个过程中可能导致了请求地址的问题,把我链到了别的地址上。
这个问题解决之后,新的问题又出来了,虽然访问到了正确的页面,但是我并没接收到那三个重要的cookie。
这下就让我头大了,正确的模拟得到了正确的结果但是却没有得到需要的cookie。
再次分析httpwatch抓到的包,我又有了新的发现
可以看出,我在访问第一个地址的时候,浏览器收到了一个302,进行了跳转,跳转之前,服务器给浏览器发了cookie,浏览器将cookie保存了下来,然后进行了跳转。
这时我想到了我的程序可能是因为httpclient自动处理了这个跳转指令,我所获得的cookie是跳转之后的cookie,并不是那个含有重要参数的cookie,如果是这样的话,就可以说得通了。浏览器虽然也跳转了,但是它把跳转前收到的cookie存了下来。我所用的httpclient也自动跳转了,但是跳转前的cookie并没有被记录下来。
于是,我带着这种猜测,看了看httpclient的源码
可以看到,httpclient确实自动做了重定向的处理,并且在做处理时,并没有保留跳转前页面的信息。于是我便尝试着把请求时自动处理重定向的选项设置成false
getMethod.setFollowRedirects(false);
再次尝试,果然得到了想要的cookie值。
得到了p_skey、p_uin、pt4_token的值之后,把他们加到cookie中,再用post方法访问http://d.web2.qq.com/channel/login2
其中clientid是随机的,可以直接用抓取到的数,ptwebqq的值可以在第一步登录时获取到的cookie中得到,知道post包结构之后,就可以自己组装一个包,发给服务器了
PostMethod method = new PostMethod("http://d.web2.qq.com/channel/login2");NameValuePair nvp[] = new NameValuePair[] {new NameValuePair("clientid", "85687680"),new NameValuePair("psessionid", ""),new NameValuePair("r","{\"status\":\"online\",\"ptwebqq\":\""+ ptwebqq+ "\",\"passwd_sig\":\"\",\"clientid\":\"85687680\",\"psessionid\":null}"), };method.setRequestBody(nvp);
如果成功了,服务器会返回vfwebqq和psessionid两个cookie值
把这两个值存好,以后做抓取信息时用得到。这时,你正在登陆的qq客户端就会被顶下线,这就代表这我们大功告成了!
模拟登陆webqq总结(二)相关推荐
- python webqq机器人_python模拟开发WebQQ(二)
前端页面设计 前端主要采用bootstrap和jquery开发,聊天室的页面展示代码在template/webqq/dashboard.html 主要设计分为: 对data_type的切换是联系人还是 ...
- 网络爬虫模拟登陆获取数据并解析实战(二)
本文为原创博客,仅供学习使用.未经本人允许禁止复制下来,上传到百度文库等平台. 目录 分析要获取的数据 程序的结构 构建封装数据的model 模拟登陆程序并解析数据 结果展示 分析要获取的数据 下面继 ...
- Python爬虫(二十二)_selenium案例:模拟登陆豆瓣
本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*-from sele ...
- 【Python3.6爬虫学习记录】(十二)PhantomJS模拟登陆并爬取教务处学生照片(哈工大)
前言:这也不算心血来潮的事情,前面几天文章都涉及过,之前一直觉得很麻烦.必须SSLVPN登陆,到教务处页面,然后进行页面跳转到照片页面.所以每次打开图片页面都要保证登陆教务处,当然可以使用cookie ...
- 【转】 浏览器分析模拟登陆过程
原文地址:http://www.crifan.com/use_ie9_f12_to_analysis_the_internal_logical_process_of_login_baidu_main_ ...
- python 模拟登陆智联_Python+scrapy爬虫之模拟登陆
一.126,163邮箱模拟登陆 # -*- coding:utf-8 -*-import timefrom selenium import webdriverdef login126_or_163em ...
- 用爬虫实现验证码识别并模拟登陆和cookie操作、代理操作、线程池
一.模拟登陆 1.为什么要进行模拟登陆 有时,我们需要爬取一些基于个人用户的用户信息(需要登陆后才可以查看) 2.为什么要需要识别验证码 因为验证码往往是作为登陆请求中的请求参数被使用 3.验证码识别 ...
- 爬虫模拟登陆手机验证码_Python+scrapy爬虫之模拟登陆
一.126,163邮箱模拟登陆 # -*- coding:utf-8 -*-import timefrom selenium import webdriverdef login126_or_163em ...
- socket模拟http的登陆_Python网络爬虫之模拟登陆 !
为什么要模拟登陆? Python网络爬虫应用十分广泛,但是有些网页需要用户登陆后才能获取到信息,所以我们的爬虫需要模拟用户的登陆行为,在登陆以后保存登陆信息,以便浏览该页面下的其他页面. 保存用户信息 ...
- Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】
登陆时间:2019-10-21 实现难度:★★★☆☆☆ 请求链接:https://kyfw.12306.cn/otn/resources/login.html 实现目标:模拟登陆中国铁路12306,攻 ...
最新文章
- httpClient多线程请求
- Hadoop 运行模式
- 财务学python有什么用_学习Python对财务工作者有哪些用途?
- Moblin MID开发学习笔记 - application launcher安装过程
- mysql+使用swap_MySQL避免使用SWAP
- java B2B2C Springcloud仿淘宝电子商城系统-spring cloud 框架原理
- 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.1)——漫反射(diffuse reflection)
- java filter 注解_JAVA 之 Filter
- android RN开发环境搭建
- 南海区妇幼保健院HIS数据容灾备份系统项目
- Golang zip文件解压与压缩
- 信号与系统学习笔记与代码实现3-周期信号的傅里叶级数表示
- mysql数据库知识
- 13. 罗马数字转整数
- 政策解读│软件产业企业所得税优惠政策介绍(2022年版)
- 什么是图论和图论在数字图像中的应用
- 无皇刀谭 · 异邦人
- Android--百度地图学习笔记(二)--167错误、定位到非洲
- win10 蓝牙耳机 音量太小
- Java工程师学习指南 入门篇