`
to_zoe_yang
  • 浏览: 142491 次
  • 性别: 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)源码整理

    在使用这个源码时,你需要解压`javaSrc34.zip`文件,根据`下载及使用说明.txt`了解具体步骤,并可能需要访问提供的URL获取解压密码。此外,深入研究源代码,理解每个部分的功能和实现机制,对于学习和提升Java Web...

    仿WEBQQ源码文件

    【标题】"仿WEBQQ源码文件"是一个项目,它旨在模仿腾讯的WebQQ界面和功能,使用了jQuery这一流行的JavaScript库。这个源码对于学习和理解网页版即时通讯应用的开发具有一定的教学价值,适合初级到中级的IT开发者进行...

    可运行的webqq源码

    "可运行的webqq源码"指的是这个压缩包中包含了一套能够直接运行的WebQQ应用程序的源代码。WebQQ是腾讯公司推出的一种基于网页的QQ聊天客户端,用户无需下载安装,只需在浏览器中打开就能进行QQ聊天。这里的"可运行...

    基于Java的SmartQQ(WebQQ)API QQ机器人设计源码

    本项目是一款基于Java语言的SmartQQ(WebQQ)API QQ机器人设计源码,包含27个文件,其中22个为Java源文件,涵盖了智能QQ机器人开发的各个方面。该项目适用于构建自定义的QQ机器人,以实现多样化的智能交互功能。

    webqq2协议分析和qq聊天机器人简单实现

    【标题】"WebQQ2协议分析与QQ聊天机器人简单实现" 在互联网技术中,QQ作为一款流行的即时通讯软件,其背后的通信协议一直是开发者们研究的焦点。本话题主要围绕WebQQ2协议进行深入探讨,并介绍如何利用这些知识构建...

    一个基于EXT+JSP教学管理小系统(集成WebQQ)源码例子

    【EXT+JSP教学管理小系统】是一种使用EXT框架与JSP技术开发的教学管理系统实例,它结合了WebQQ功能,提供了高效、用户友好的界面,便于教育机构进行课程管理、学生信息管理以及在线交流。EXT是一个强大的JavaScript ...

    仿WebQQ的桌面(木子李作品)

    WebQQ是腾讯公司推出的一款基于Web的即时通讯工具,它允许用户在网页上登录QQ,进行聊天、文件传输等操作,无需下载客户端。"仿WebQQ的桌面"项目则是模仿这一概念,创建了一个类似WebQQ的桌面环境,让用户可以在桌面...

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

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

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

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

    基于Mojo-Webqq的Jenkins构建后QQ提醒插件

    Mojo-Webqq是一个利用Maven技术实现的插件,它允许开发者通过Maven项目与WebQQ接口进行交互,发送自定义消息。 Jenkins的QQ提醒插件则是基于Mojo-Webqq构建的,主要目的是在Jenkins完成构建后,自动向指定的QQ账号...

    基于Coolite0.7做的WEBQQ

    通过分析这些文件,我们可以进一步了解WebQQ的具体实现细节,例如它是如何使用Coolite0.7和其他技术来处理用户交互、数据通信和状态管理的。 总的来说,基于Coolite0.7的WebQQ是一个利用现代Web技术实现的即时通讯...

    webqq的相关代码

    1. **Ajax技术**:WebQQ作为网页版应用,很可能大量使用Ajax(异步JavaScript和XML)技术,以实现实时更新和无刷新页面交互,提高用户体验。 2. **WebSocket**:为了实现即时通讯,WebQQ可能采用了WebSocket协议,...

    网页聊天程序源码

    7. **JSON(JavaScript Object Notation)**:作为数据交换格式,JSON在WebQQ源码中用于在客户端和服务器间传输聊天记录、用户信息等数据。 8. **服务器端技术**:后端可能采用了Node.js、PHP、Java或Python等...

    离线挂QQ 防止QQ号码会回收 天柄挂Q源码 v1.0

    在使用天柄挂Q源码前,用户需要有一定的编程基础,例如了解C#、Java或Python等语言。源码提供的是未经编译的原始代码,用户需要根据自己的环境进行编译和配置。同时,"免费空间"和"ftpxp上传源码"是指用户可以寻找...

    Web在线聊天完整源码

    【Web在线聊天完整源码】是一款基于Web技术实现的在线聊天系统,提供了丰富的功能和完整的源代码,适合学习和开发类似应用的人员参考。这款源码涵盖了从客户端界面设计到服务器端逻辑处理的全过程,包括用户注册、...

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

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

Global site tag (gtag.js) - Google Analytics