上一篇已经做完了模拟登陆的第一步,此时我们已经获得了一个如下的反馈结果(由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&regmaster=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总结(二)相关推荐

  1. python webqq机器人_python模拟开发WebQQ(二)

    前端页面设计 前端主要采用bootstrap和jquery开发,聊天室的页面展示代码在template/webqq/dashboard.html 主要设计分为: 对data_type的切换是联系人还是 ...

  2. 网络爬虫模拟登陆获取数据并解析实战(二)

    本文为原创博客,仅供学习使用.未经本人允许禁止复制下来,上传到百度文库等平台. 目录 分析要获取的数据 程序的结构 构建封装数据的model 模拟登陆程序并解析数据 结果展示 分析要获取的数据 下面继 ...

  3. Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

    本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*-from sele ...

  4. 【Python3.6爬虫学习记录】(十二)PhantomJS模拟登陆并爬取教务处学生照片(哈工大)

    前言:这也不算心血来潮的事情,前面几天文章都涉及过,之前一直觉得很麻烦.必须SSLVPN登陆,到教务处页面,然后进行页面跳转到照片页面.所以每次打开图片页面都要保证登陆教务处,当然可以使用cookie ...

  5. 【转】 浏览器分析模拟登陆过程

    原文地址:http://www.crifan.com/use_ie9_f12_to_analysis_the_internal_logical_process_of_login_baidu_main_ ...

  6. python 模拟登陆智联_Python+scrapy爬虫之模拟登陆

    一.126,163邮箱模拟登陆 # -*- coding:utf-8 -*-import timefrom selenium import webdriverdef login126_or_163em ...

  7. 用爬虫实现验证码识别并模拟登陆和cookie操作、代理操作、线程池

    一.模拟登陆 1.为什么要进行模拟登陆 有时,我们需要爬取一些基于个人用户的用户信息(需要登陆后才可以查看) 2.为什么要需要识别验证码 因为验证码往往是作为登陆请求中的请求参数被使用 3.验证码识别 ...

  8. 爬虫模拟登陆手机验证码_Python+scrapy爬虫之模拟登陆

    一.126,163邮箱模拟登陆 # -*- coding:utf-8 -*-import timefrom selenium import webdriverdef login126_or_163em ...

  9. socket模拟http的登陆_Python网络爬虫之模拟登陆 !

    为什么要模拟登陆? Python网络爬虫应用十分广泛,但是有些网页需要用户登陆后才能获取到信息,所以我们的爬虫需要模拟用户的登陆行为,在登陆以后保存登陆信息,以便浏览该页面下的其他页面. 保存用户信息 ...

  10. Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】

    登陆时间:2019-10-21 实现难度:★★★☆☆☆ 请求链接:https://kyfw.12306.cn/otn/resources/login.html 实现目标:模拟登陆中国铁路12306,攻 ...

最新文章

  1. httpClient多线程请求
  2. Hadoop 运行模式
  3. 财务学python有什么用_学习Python对财务工作者有哪些用途?
  4. Moblin MID开发学习笔记 - application launcher安装过程
  5. mysql+使用swap_MySQL避免使用SWAP
  6. java B2B2C Springcloud仿淘宝电子商城系统-spring cloud 框架原理
  7. 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.1)——漫反射(diffuse reflection)
  8. java filter 注解_JAVA 之 Filter
  9. android RN开发环境搭建
  10. 南海区妇幼保健院HIS数据容灾备份系统项目
  11. Golang zip文件解压与压缩
  12. 信号与系统学习笔记与代码实现3-周期信号的傅里叶级数表示
  13. mysql数据库知识
  14. 13. 罗马数字转整数
  15. 政策解读│软件产业企业所得税优惠政策介绍(2022年版)
  16. 什么是图论和图论在数字图像中的应用
  17. 无皇刀谭 · 异邦人
  18. Android--百度地图学习笔记(二)--167错误、定位到非洲
  19. win10 蓝牙耳机 音量太小
  20. Java工程师学习指南 入门篇

热门文章

  1. MAX30102+usb转串口+树莓派
  2. usb驱动错误导致的键盘鼠标失灵
  3. 银河麒麟v10sp1桌面安装远程控制工具todesk
  4. 一文读懂人脸识别技术
  5. Geodatabase
  6. 四、day02切换滑块
  7. 异常值(outlier)的判别与剔除
  8. 【设计模式】05模板方法模式学习笔记
  9. 软件研发中也有5S 管理?
  10. Win7 环境下 IE8 升级到 IE11 后 F12 工具无法使用