C# 登录QQ网站并获取QQ相关信息

QQ第三方网站登录后台代码演示 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using 阅读详情
本文以登录http://id.qq.com为例,获取用户等级、Q龄等相关信息。
本文界面使用WPF制作 
技术涵盖:C#、wpf、HttpWebRequest、HttpWebResponse
(.net framework 4.5,当然你也可以使用4.0。不知道为什么使用3.5无法得到正确的结果,代码一模一样,还望高人指点!)


1、获取独立登录框地址


1)首先用谷歌浏览器打开http://id.qq.com,并用开发人员工具(快捷键:ctrl+shift+i)查看登陆框地址



2)Open link in new tab


到这里我们已经得到独立登陆框的地址了,方便调试和拦截请求。

成果

登录框地址:

http://ui.ptlogin2.qq.com/cgi-bin/login?appid=1006102&hide_title_bar=1&begin_time=1347444392246

&css=http%3A%2F%2Fimgcache.qq.com%2Fptcss%2Fr1%2Fjt%2F1006102%2Fpt_login.css

&f_url=loginerroralert&no_verifyimg=1&qlogin_jumpname=jump&hide_close_icon=1&s_url=http://id.qq.com/index.html


URL中有很多控制样式的参数,可简化为如下地址:

http://ui.ptlogin2.qq.com/cgi-bin/login?appid=1006102&s_url=http://id.qq.com/index.html



2、获取登录时请求的地址

通过浏览器的开发人员工具或其他HTTP拦截工具获得登录时请求的地址。

1)打开上一步得到的登录地址,并开启浏览器的开发人员工具,用以拦截请求。
2)随便输入一个号码、密码、验证码后点击登录,得到如下结果:



我们可以看到一共发送了3个请求:
请求名称返回值请求地址描述
check不通过:
ptui_checkVC('1',
'a89853e618880c1b93041bda88f5fb673c8eb5555a8850fd',
'\x00\x00\x00\x00\x01\x53\x15\x8e');

通过:
ptui_checkVC('0','!5A3',
'\x00\x00\x00\x00\x05\xef\x0f\xba');
http://check.ptlogin2.qq.com/check?
uin=22222222&appid=1006102&r=0.10299430438317358
当输入QQ号码后文本框失去焦点时发送该请求,用于检查此次登录是否需要验证码。
getimage验证码图片http://captcha.qq.com/getimage?aid=1006102&r=0.06791123608127236&uin=22222222如果上一步的check方法不通过则会自动发送这个请求获取验证码。
loginptuiCB('3','0','','0',
'您输入的帐号或密码不正确,请重新输入。', '22222222');
http://ptlogin2.qq.com/login?u=22222222&p=712F9A90BABE147B7A3A4427DF48698C&verifycode=gqfj&
aid=1006102&u1=http%3A%2F%2Fid.qq.com%2Findex.html&
h=1&ptredirect=1&ptlang=2052&from_ui=1&dumy=&
fp=loginerroralert&action=8-29-82478035&mibao_css=&t=1&g=1
点击登录按钮时发送该请求进行登录操作。

值得一提的是,通过调试发现点击登录后密码在客户端是通过加密后再传输的(加密方法位于comm.js,有兴趣的可以在JS中查看如下方法)。
            var M = C.p.value;
            var I = hexchar2bin(md5(M));
            var H = md5(I + pt.uin);
            var G = md5(H + C.verifycode.value.toUpperCase());



加密方法翻译为C#后如下:
public class PasswordHelper
    {
        /// <summary>
        /// 根据QQ号码和验证码加密密码
        /// </summary>
        /// <param name="qqNum">QQ号码</param>
        /// <param name="password">QQ密码</param>
        /// <param name="verifycode">验证码</param>
        /// <returns>密码密文</returns>
        public static string GetPassword(string qqNum, string password, string verifycode)
        {
            //uin为QQ号码转换为16位的16进制
            int qq;
            int.TryParse(qqNum, out qq);

            qqNum = qq.ToString("x");
            qqNum = qqNum.PadLeft(16, '0');

            String P = hexchar2bin(md5(password));
            String U = md5(P + hexchar2bin(qqNum)).ToUpper();
            String V = md5(U + verifycode.ToUpper()).ToUpper();
            return V;
        }

        public static string md5(string input)
        {
            byte[] buffer = MD5.Create().ComputeHash(Encoding.GetEncoding("ISO-8859-1").GetBytes(input));
            return binl2hex(buffer);
        }

        public static string binl2hex(byte[] buffer)
        {
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < buffer.Length; i++)
            {
                builder.Append(buffer[i].ToString("x2"));
            }
            return builder.ToString();
        }

        public static string hexchar2bin(string passWord)
        {
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < passWord.Length; i = i + 2)
            {
                builder.Append(Convert.ToChar(Convert.ToInt32(passWord.Substring(i, 2), 16)));
            }
            return builder.ToString();
        }


3、使用WPF构建登录框

直接用设计器拖一个登录界面出来,并模仿登录操作,使用HttpHelper发送上面的请求。



我所使用的HttpHelper如下,很简单,大家可以自行扩展:
    public class HttpHelper
    {
        private static string contentType = "application/x-www-form-urlencoded";
        private static string accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight-2-b1, */*";
        private static string userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7; BOIE9;ZHCN)";
        public static string referer = "http://ui.ptlogin2.qq.com/cgi-bin/login?appid=1006102&s_url=http://id.qq.com/index.html";

        /// <summary>
        /// 获取字符流
        /// </summary>
        /// <param name="url"></param>
        /// <param name="cookieContainer"></param>
        /// <returns></returns>
        public static Stream GetStream(string url, CookieContainer cookieContainer)
        {
            HttpWebRequest httpWebRequest = null;
            HttpWebResponse httpWebResponse = null;

            try
            {
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
                httpWebRequest.CookieContainer = cookieContainer;
                httpWebRequest.ContentType = contentType;
                httpWebRequest.Referer = referer;
                httpWebRequest.Accept = accept;
                httpWebRequest.UserAgent = userAgent;
                httpWebRequest.Method = "GET";
                httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;

                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                Stream responseStream = httpWebResponse.GetResponseStream();

                return responseStream;
            }
            catch (Exception)
            {
                return null;
            }

        }

        /// <summary>
        /// 获取HTML
        /// </summary>
        /// <param name="url"></param>
        /// <param name="cookieContainer"></param>
        /// <returns></returns>
        public static string GetHtml(string url, CookieContainer cookieContainer)
        {
            HttpWebRequest httpWebRequest = null;
            HttpWebResponse httpWebResponse = null;
            try
            {
                httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
                httpWebRequest.CookieContainer = cookieContainer;
                httpWebRequest.ContentType = contentType;
                httpWebRequest.Referer = referer;
                httpWebRequest.Accept = accept;
                httpWebRequest.UserAgent = userAgent;
                httpWebRequest.Method = "GET";
                httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;

                httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                Stream responseStream = httpWebResponse.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
                string html = streamReader.ReadToEnd();

                streamReader.Close();
                responseStream.Close();

                httpWebRequest.Abort();
                httpWebResponse.Close();

                return html;
            }
            catch (Exception)
            {
                return string.Empty;
            }

        }
    }


4、登录成功后查询我们需要的信息

通过拦截请求并分析得出我需要的信息位于如下请求中:
http://id.qq.com/cgi-bin/summary?ldw=f61210b82e57b6a466af5fcabe07b2d6720bf092d69e4eab

注:ldw从登录后的cookie中获取
然后继续发送请求:


自此我们的功能基本上完成了,登录成功后查询其他数据也都很方便了。


5、注意点提示:

在实际操作中需要注意参数的传递和cookie的获取。查询有些数据前必须要先发送一些特定的请求去获取cookie或参数。

祝你成功!只要登录后可以直接获取QQ空间信息或WebQQ中的信息亦或是操作QQ游戏。



C#自动登录网站(一)----WebBrowser 这章写自动登录某个网站,例如QQ空间,163邮箱啊,csdn等,有那里不对希望读者指点出来或者有更好的提议的说出来。 看到文章的题目大家也清楚这篇文章用的便是WebBrowser,写完到时还会出另外2种使用WebClient跟使用HttpWebRequest/HttpWebResponse。 一、我们先建立一个window窗体应用。 把窗体设置大点。 然后在左边工具箱所有窗体控件里 阅读详情

相关推荐

如何用c#制作QQ农场外挂

<br />前一篇文章我大致写了一下如何制作QQ农场外挂,最近我的外挂运行了一段时间,觉得还行,所以拿出来给大家下载试用试用<br />  大致功能有:<br />  1。我的资料,查看我的等级,经验,金钱等信息<br />  2。我的农场:可以查看我的农场信息,种了哪些作物,什么时候成熟<br />  3。我的仓库,可以浏览仓库里的物品,并可以卖掉<br />  4。我的背包:可以浏览背包里的东西,并可以自动播铲(没用的种子种了马上铲掉又种获取经验)<br />  5。我的装饰:查看我购买的所有装饰<br

qq317543501的专栏 1002

C#编写QQ接口软件--QQ协议篇

1、找寻支持QQ HTTP协议的服务器。 大家也许会被一些假像所迷惑,也许会认为QQ的HTTP服务器是基于80口进行通信的(如: 218.17.209.23:80),其实不然,正真基于HTTP的服务器应该是:http://tqq.tencent.com:8000,它是一个通过8000口进行通讯的服务器。 由于QQ的HTTP服务器并不支持HTTP协议中GET方法,它支持POST方法。所以我们要给QQ

吹云专栏 1896

用asp.net基于C#编写简单登录注册界面(访问数据库)

一、首先建好项目,并且建立好一个web空窗体 如何建好web空网站,参考博文:https://blog.youkuaiyun.com/qq_44394562/article/details/116308453 这里我使用两个TextBox和三个Button控件,简单排列好布局 同样的方式我们建立一个注册界面: 这里我使用了三个TextBox、两个Button、一个Label和一个CompareValidator验证控件 其中CompareValidator验证控件用来验证密码和确认密码栏是否一致,如果不一致给出错误

qq_44394562的博客 1万+

C#项目实战练习:SunTalk——做你自己的QQ

文章目录一、前言二、项目介绍三、开发技术四、程序缺陷五、前车之鉴六、正式开始七、数据库设计1、创建数据库2、数据表设计2.1 tb_User(用户信息表)2.2 tb_Friend(好友信息表)2.3 tb_Message(消息表)2.4 tb_MessageType(消息类型表)2.5 tb_FriendLimit(添加好友条件表)3、视图设计八、创建项目1、选择 .NET Framework 框架2、以100%缩放比例重启VS九、用户登录窗体1、登录窗体布局设计2、登录窗体控件填充3、登录窗体功能实现3

sunshine的博客 1万+

同花顺某v参数详解

声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标站点:aHR0cDovL3EuMTBqcWthLmNvbS5jbi8= 通过抓包,查看,在headers中有一个hexin-v,也是Cookie中的v,经过测试,是动态发生变化的 这里我们直接hook 通过调用栈,在c这里已经生成了 继续往上回溯,来到这么一个地方 打上断点,单步进入,发现D函数是调用O函数,O函数就在上边 O函数

qq_44902227的博客 2601

实现获取当前登录QQ号码的网络爬虫技术

QQ空间登录流程遵循HTTP协议的请求-响应模型。首先,客户端将用户的用户名和密码(或其他认证信息)发送给服务器。服务器验证这些信息的正确性后,将生成相应的登录凭证(通常是Cookie),并返回给客户端。客户端保存这些凭证以维持后续会话。以下是QQ空间登录流程的Mermaid流程图:graph TDA[开始] --> B{用户提交登录信息}B --> C[服务器验证信息]C -->|成功| D[服务器生成凭证]C -->|失败| E[显示错误信息]D --> F[客户端保存凭证]

weixin_42602726的博客 1237

C#实现QQ扫码登录

第一步:获取AppID AppSecret(去QQ开放平台申请网址https://connect.qq.com/index.html/) 第二步:生成扫描二维码,获取code https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101463261&redirect_uri=回调地址&sta...

yuanfang5188的博客 4474

C#应用webQQ协议登陆

SmartQQ是腾讯新出的一个WebQQ,登录地址是:http://w.qq.com/.这个程序是模仿web的登陆过程.是学习的好东东。

网站QQ扫码登录代码及详细说明

简介: 您应该已经看到所有扫描代码的网站,以登录,获取用户信息或验证QQ号 今天,我将为您详细介绍QQ二维码扫码和登录代码。 快速将QQ登录名添加到您的网站 每个人都可以通过扫描代码,获取cookie并进行操作来了解mz网络和dg网络 网盘下载地址: http://kekewl.cc/4sKDNGXZXRX0 图片: ...

ouyang12333的博客 2859

c#实现WebQQ登陆(c/s)

c#基于webqq的http协议实现登陆

qq登录协议

qq登录协议

使用C#登录QQ空间的过程分析与实现

本篇文章主要是具体地分析如何用C#登录QQ空间之类在安全验证方面稍微复杂一点的网站,希望对大家有所帮助。    大家知道,一般而言,我们要登录网站时,都要提交两样最基本的东西-----就像去餐厅吃饭一定要交钱一样----这两样东西就是用户名与密码。当然有些餐厅比较先进一点,还得再加上验证码。我们输入这些数据之后,就将其提交到服务器进行验证,认证成功之后我们就具有所需要的权限,比如可以发帖子之

淡定 886

C#获取本机登录的QQ号码-源码

C#获取本机登录的QQ号码-源码

[C#]QQ开放平台(QQ站外登录)_流程和源码示例[原创]

本人阿旭,近期研究QQ开放平台的程序开发。因为使用.NET语言,到官方SDK下载竟然是一个DLL,下来经过反编译也没搞清楚怎么弄,晕菜。后来网上见一PHP源码,写的不错,按其原理,开发成了C#语言,本示例程序使用的OAuth2.0,是目前最新执口版本,写下来希望对大家有所帮忙。 本文内容 QQ开放平台(QQ登录)开发介绍 准备工作 QQ开放平台中QQ登录程序运行流程 示例源...

292

C#实现的QQ登录器

C#实现的QQ登录器C#实现的QQC#实现的QQ登录器登录器C#实现的QQ登录器C#实现的QQ登录器

C#获得当前登录的所有QQ号码,可支持win10_64

直接复制可用

PHP & C#-QQ网站bkn算法

模拟登录腾讯的一些网站需要bkn值,没有bkn值模拟登录会失败,比如登录qq群管理网站qun.qq.com,就需要bkn值,除此之外,模拟访问还需要uin,skey,p_skey这几个参数,均在cookie中有。 我用php和c#写过相关的东西,整理了下bkn,直接调用即可。算法来源于网络。 php代码 /** *QQ网站bkn算法,qq群网页或者空间之类的网站 *string $skey ...

小白 1784

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5890
上一篇: C# 泛型编程之泛型类、泛型方法、泛型约束
下一篇: c#你怎么判断一个字符串是否是数字?
Hauk
博客等级 码龄15年 219粉丝 20原创
评论 23
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值