网页抓取qq(本文界面使用WPF制作技术(一)(1)_光明网(组图) )

优采云 发布时间: 2022-03-12 09:15

  网页抓取qq(本文界面使用WPF制作技术(一)(1)_光明网(组图)

)

  本文以登录为例,获取用户等级、Q年龄等相关信息。

  本文界面使用WPF制作

  涵盖的技术:C#、wpf、HttpWebRequest、HttpWebResponse

  (.net framework 4.5,当然你也可以用4.0。不知道为什么用3.5不能得到正确的结果,代码就是一样,希望有大神指教!)

  1、获取独立登录框的地址

  1)先用谷歌浏览器打开,用开发者工具(快捷键:ctrl+shift+i)查看登录框地址

  

  2)在新标签页中打开链接

  

  至此,我们就获得了独立登录框的地址,方便调试和拦截请求。

  成就

  登录框地址:

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

  &f_url=loginerroralert&no_verifyimg=1&qlogin_jumpname=jump&hide_close_icon=1&s_url=

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

  :///index.html

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

  通过浏览器的开发者工具或其他 HTTP *敏*感*词*工具获取登录时请求的 URL。

  1)打开上一步获取的登录地址,打开浏览器的开发者工具拦截请求。

  2)输入任意号码、密码、验证码点击登录,得到如下结果:

  

  我们可以看到一共发送了3个请求:

  请求名称

  返回值

  请求地址

  描述

  查看

  失败:

  ptui_checkVC('1',

  'a89853e618880c1b93041bda88f5fb673c8eb5555a8850fd',

  '\x00\x00\x00\x00\x01\x53\x15\x8e');

  通过:

  ptui_checkVC('0','!5A3',

  '\x00\x00\x00\x00\x05\xef\x0f\xba');

  uin=22222222&appid=1006102&r=0.317358

  当输入QQ号后文本框失去焦点时发送该请求,以检查本次登录是否需要验证码。

  获取图像

  验证码图片

  如果上一步的校验方式失败,会自动发送该请求获取验证码。

  登录

  ptuiCB('3','0','','0',

  '您的密码或用户名错误,请重新输入。', '22222222');

  援助=1006102&u1=http%3A%2F%%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

{

///

/// 根据QQ号码和验证码加密密码

///

/// QQ号码

/// QQ密码

/// 验证码

/// 密码密文

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发送上述请求。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线