`
to_zoe_yang
  • 浏览: 138724 次
  • 性别: Icon_minigender_2
  • 来自: 01
社区版块
存档分类
最新评论

使用Java实现登陆WebQQ(带源码)

    博客分类:
  • TX
阅读更多
  使用Java中的URL 和 HttpURLConnection 就可以实现模拟网页登陆!
  分析登陆的协议,可以使用HttpWatcher,蛮好用的!
目前就两种网页请求方式
Get和Post
我们可以自己先写好这两个方法,以便之后调用
这个就是Get请求方式了,参数就是URL地址
	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脚本里,我们可以下下来这个脚本,然后直接调用。
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重新写~

附上源代码,谁要是解决了发消息的问题
给我说声啊~
分享到:
评论
7 楼 坏小子46110 2012-05-01  
我在build comm.js的时候有个这个异常 不知道怎么解决 希望解决的朋友给回复下
-----firstLogin----
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "g_appid" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
6 楼 to_zoe_yang 2012-04-06  
公子_小王 写道
怎么下载不下来呢?

估计TX现在肯定改接口了
都不能用了~
很久不弄这东西了
5 楼 公子_小王 2012-04-05  
怎么下载不下来呢?
4 楼 hexin46373 2011-11-23  
  楼主 能提供QQ一起交流吗 看到留言的朋友加我QQ:284466130 一起交流

3 楼 hexin46373 2011-11-19  
牛B 技术非常好!! 谢谢无私的分享 爱死你了!

能正常得到数据~!


   
2 楼 to_zoe_yang 2011-09-01  
A236469917 写道
等这个很久了。。。测试中

估计现在不能用了~
web端很好改~
1 楼 A236469917 2011-09-01  
等这个很久了。。。测试中

相关推荐

    EXT+JSP教学管理小系统(集成WebQQ)源码整理

    EXT+JSP教学管理小系统(集成WebQQ)源码整理

    基于HTML实现聊天留言网站_WebQQv1.81_webqq181(HTML源码+数据集+项目使用说明).rar

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    可运行的webqq源码

    可独立运行,可做集成,相当给力,java ext,

    【php+mysql+毕业设计源代码】Visual WebQQ PHP_webqq10php.rar

    包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,...

    聊天留言WebQQv1.81-webqq181.rar

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    [聊天留言]WebQQv1.81_webqq181.rar

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    聊天留言Visual WebQQv1.0 PHP-webqq10php.rar

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    [聊天留言]Visual WebQQv1.0 PHP_webqq10php.rar

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用...

    【php+mysql+毕业设计源代码】WebQQv1.81_webqq181.rar

    包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,...

    javawebqq源码-MaterialQQLite:已挂Q_Q

    webqq源码 MaterialQQLite MaterialQQ Lite是根据开源项目MingQQ修改得来的,主要做了界面改进,功能上基本和MingQQ一致。 现将代码开源,期待感兴趣的开发人员完善这个项目。 ##重要说明(摘录) 为了满足Material ...

Global site tag (gtag.js) - Google Analytics