使用Java实现登陆WebQQ(带源码)
原文地址为: 使用Java实现登陆WebQQ(带源码)
使用Java中的URL 和 HttpURLConnection 就可以实现模拟网页登陆!
分析登陆的协议,可以使用HttpWatcher,蛮好用的!
目前就两种网页请求方式
Get和Post
我们可以自己先写好这两个方法,以便之后调用
这个就是Get请求方式了,参数就是URL地址
Java代码
- public static String get(String url) {
- System.out.println("get>>>" + url);
- URL serverUrl;
- HttpURLConnection conn;
- StringBuffer res = new StringBuffer();
- try {
- serverUrl = new URL(url);
- conn = (HttpURLConnection) serverUrl.openConnection();
- conn.setRequestMethod("GET");// "POST" ,"GET"
- conn.addRequestProperty("Cookie", cookie);
- conn.addRequestProperty("Accept-Charset", "UTF-8;");// GB2312,
- conn.addRequestProperty("User-Agent",
- "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8");
- conn.connect();
- if (conn.getHeaderFields().get("Set-Cookie") != null) {
- for (String s : conn.getHeaderFields().get("Set-Cookie")) {
- cookie += s;
- }
- }
- InputStream ins = conn.getInputStream();
- String charset = "UTF-8";
- InputStreamReader inr = new InputStreamReader(ins, charset);
- BufferedReader bfr = new BufferedReader(inr);
- String line = "";
- do {
- res.append(line);
- line = bfr.readLine();
- // System.out.println(line);
- } while (line != null);
- System.out.println("Value>>" + res);
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- }
- return res.toString();
- }
1.登陆前,我们需要判断此次登陆是否需要手动输入验证码。
地址(GET):http://ptlogin2.qq.com/check?uin=********(QQ号码)&appid=1003903(固定)&r=0.2664082343145449(随机18位 简单的说 0.后面+随机16位数)
返回值有两种
第一种:
ptui_checkVC('1','8a6143167c8ca486696cf01c3ea088d658b913d64b11289b')
这种情况下,我们需要获得验证码图片并手动输入验证码。
此时我们可以将图片保存下来,然后使用SWING显示并输入,就可以得到验证码了。
第二种:
“ptui_checkVC('0','!OMD');
这种情况下,!OMD就是我们需要的验证码了。
2.第一次登陆
得到验证码之后就可以进行第一次登陆,为什么是第一次?你试验下就知道了,当你此次登陆成功后,发现登陆的QQ并没有提示掉线或者别处登陆的,这是因为我们还需要后续的第二次登陆。
http://ptlogin2.qq.com/login?u=*******(QQ号)&p=793E7DF74F8D87021F79A69F0DBF8287(md5(md5(密码)+验证码))&verifycode=!OMD(验证码)&webqq_type=10&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert&mibao_css=m_webqq
呵呵~verifycode我们第一步就得到了。QQ号我们也知道。就是参数p啦~
就是使用密码和验证码经过加密得到的啦。
想研究加密过程的同学可以百度下,很多的!
此段加密算法是在一个js脚本里,我们可以下下来这个脚本,然后直接调用。
Java代码
- public static String mdP(String p, String code){
- Object t = null ;
- try {
- ScriptEngineManager m = new ScriptEngineManager();
- ScriptEngine se = m.getEngineByName("javascript");
- se.eval(new FileReader(new File("comm.js")));
- t = se.eval("md5(md5_3(\""+p+"\")+\""+code.toUpperCase()+"\");");
- return t.toString();
- }catch (Exception e) {
- e.printStackTrace();
- }
- return t.toString();
- }
第一登陆后,TX会返回Cookie,我们需要保持,在之后的第二次登陆中使用。
3.第二次登陆
需要使用Post方法:http://d.web2.qq.com/channel/login2
POST数据:
r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22” + ptwebqq + “%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22” + clientid + “%22%2C%22psessionid%22%3Anull%7D&clientid=” + clientid + “&psessionid=null
ptwebqq 就是我们在第一次登陆后获得的Cookie里的值,clientid是随机的的值,可以直接使用抓取到的值。
登陆成功后,会返回数据
{"retcode":0,"result":{"uin":********(QQ号码),"cip":3071582136,"index":1078,"port":53985,"status":"hidden","vfwebqq":"5ab2ce0743496ffa257aa4119f35e44324171aa08d3e14a4c506b7e392ca80b73e34551cef71a248","psessionid":"8368046764001e636f6e6e7365727665725f7765627171403137322e32372e3138312e3835000062450000079e03620524ef666d0000000a406e4e53734a517a33556d000000285ab2ce0743496ffa257aa4119f35e44324171aa08d3e14a4c506b7e392ca80b73e34551cef71a248"}}
vfwebqq和psessionid在之后和获取好友,群信息,以及发送消息都要使用。
目前做到发送消息,不过老是返回{"retcode":122,"errmsg":"wrong web client3"}
Post数据也没有问题,不知道到底是为啥~
目前写的类也有点乱,打算使用HttpClient重新写~
转载请注明本文地址: 使用Java实现登陆WebQQ(带源码)
使用Java实现登陆WebQQ(带源码)相关推荐
- 转 使用Java实现登陆WebQQ(带源码)
使用Java中的URL 和 HttpURLConnection 就可以实现模拟网页登陆! 分析登陆的协议,可以使用HttpWatcher,蛮好用的! 目前就两种网页请求方式 Get和Post 我 ...
- java打包带有外部jar,Eclipse使用总结——使用Eclipse打包带源码的jar包
平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...
- shiro实现无状态的会话,带源码分析
转载请在页首明显处注明作者与出处 朱小杰 http://www.cnblogs.com/zhuxiaojie/p/7809767.html 一:说明 在网上都找不到相关的信息,还是翻了大半天 ...
- 视频教程-手把手实现Java图书管理系统(附源码)-Java
手把手实现Java图书管理系统(附源码) 南京大学软件工程硕士,曾就职于擎天科技.中软国际.华为等上市公司,擅长Java开发.Web前端.Python爬虫.大数据等领域技术. 全栈工程师,从事软件开发 ...
- java教学辅助系统的源码_基于jsp的教学辅助系统-JavaEE实现教学辅助系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的教学辅助系统, 该项目可用各类java课程设计大作业中, 教学辅助系统的系统架构分为前后台两部分, 最终实现在线上 ...
- 手把手搭建Java在线商城系统【附源码】(毕设)
一.项目简介 本课程演示的是一套基于Java的SSM框架实现的在线商城系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群. 详细介绍了在线商城系统的实现,包括: 1.项目介 ...
- java连接mongodb_java连接mongodb源码解读
用mongdb也大半年了,一直是业务上的逻辑实现了就ok.然而这样并不能进步--因此今天查了查java连接mongodb驱动的源码,搜到的各种信息整合一下,方便以后深入的使用. 先贴连接数据库代码Li ...
- MyEclipse使用总结——使用MyEclipse打包带源码的jar包
平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...
- 计算机毕业设计JAVA人民医院体检预约mybatis+源码+调试部署+系统+数据库+lw
计算机毕业设计JAVA人民医院体检预约mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA人民医院体检预约mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目 ...
- 基于Java毕业设计志愿者信息管理系统源码+系统+mysql+lw文档+部署软件
基于Java毕业设计志愿者信息管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计志愿者信息管理系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 ...
最新文章
- 序列到序列网络seq2seq与注意力机制attention浅析
- python基础:并行遍历ZIP()函数介绍
- 《口袋奇兵》开发商引入阿里云PolarDB数据库 IT成本降幅达50%
- c语言调试出错误怎么改,C语言调试常见错误及修改方法(附习题)
- CornerNet: Detecting Objects as Paired Keypoints
- 音视频学习之 - H264解码
- 安川变频器跳os_变频器常见故障代码及处理实例(经典,建议收藏)
- Android之ListView/GridView 优化
- 计算机演示文稿PPT知识点,计算机PowerPoint考点
- RSS阅读器FeedDemon使用方法
- hdu1814 暴力
- 使用网上成熟的【MySqlBackup】组件,通过WEB网页操作,备份远程计算机中的数据库到C:\inetpub\wwwroot文件夹下,系统汇报错误(访问被拒绝),该如何解决呢?
- DSP28335笔记 ———— 中断系统 之 外部中断
- 蓝桥杯嵌入式LCD显示与LED显示问题
- 饿死也别进外包公司!说好不加班才入职,结果连续工作10小时,提出辞职后,外包公司竟以时间短为理由拒绝给工资!...
- 专访马云:下一个星辰大海是百货商店(附访谈视频)
- voip(语音电话)
- 计算机未来发展趋势论述,浅述未来计算机的发展趋势论文
- Unity 2019 打包黑屏、粉屏
- SRTP/SRTCP协议
热门文章
- 量子计算(四):量子力学的发展史
- 深度学习教程(2) | 神经网络基础(吴恩达·完整版)
- stm32霍尔编码器电机测速原理
- 相机模型坐标系关系及转换
- 子网地址和广播地址的计算
- Kubernetes中文文档
- python图像边缘检测_Python进行图片水平边缘检测prewitt算子法
- 数学建模:层次分析法(AHP)详细步骤
- 计算机b类核心期刊有哪些,cssci、A类、B类、C类、核心期刊都是什么等级的期刊?...
- 网络安全系列-二十五: PCAP文件格式详解及读取PCAP文件源码示例