QQ校友农场助手(有源码)

QQ农场助手,仿QQ伴侣界面,简单的功能已经可以用,VS 2005开发的。分析http请求工具,可以用HttpAnalyzer。

QQ校友农场助手(有源码)_第1张图片

 关键代码:

登录 代码
#region QQ登陆时必备函数
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 md5_3( string input)
{
MD5 md
= MD5.Create();
byte [] buffer = md.ComputeHash(Encoding.Default.GetBytes(input));
buffer
= md.ComputeHash(buffer);
buffer
= md.ComputeHash(buffer);
return binl2hex(buffer);
}

public static string md5( string input)
{
byte [] buffer = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input));
return binl2hex(buffer);
}
#endregion

/// <summary>
/// 获取加密后的密码
/// </summary>
/// <param name="password"></param>
/// <param name="verifycode"></param>
/// <returns></returns>
public static string getPassword( string password, string verifycode)
{
return md5(md5_3(password).ToUpper() + verifycode.ToUpper()).ToUpper();
}

/// <summary>
/// //QQ农场的farmTime
/// </summary>
/// <returns></returns>
public static int GetfarmTime()
{
TimeSpan t
= DateTime.Now.Subtract(DateTime.Parse( " 1970-1-1 08:00:00 " ));
return ( int )t.TotalSeconds;
}
/// 获得FarmKey
public static string GetFarmKey( string farmTime)
{
return md5(farmTime + " sdoit78sdopig7w34057 " .Substring(Convert.ToInt32(farmTime) % 10 ));
}

  

Unix时间戳
/// <summary>
/// 得到某个时间增加某个小时后的Unix时间戳
/// </summary>
/// <param name="dt"></param>
/// <param name="hours"></param>
/// <returns></returns>
public static string GetUnixtimeStamp(DateTime dt, int hours)
{
double temp = double .Parse(hours.ToString());
dt
= dt.AddHours(temp);
return GetUnixTimeStamp(dt);
}
/// <summary>
/// 得到某个时间的Unix时间戳
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string GetUnixTimeStamp(DateTime dt)
{
DateTime unixStartTime
= TimeZone.CurrentTimeZone.ToLocalTime( new DateTime( 1970 , 1 , 1 ));
TimeSpan timeSpan
= dt.Subtract(unixStartTime);
string timeStamp = timeSpan.Ticks.ToString();

return timeStamp.Substring( 0 , timeStamp.Length - 7 );
}
/// <summary>
/// 得到QQ验证码
/// </summary>
/// <returns></returns>
public Stream GetValidateCode()
{
int random = new Random().Next( 10000 , 1000000 );
Stream s
= httpHelper.GetStream( " http://ptlogin2.qq.com/getimage?aid=15000102& " + random, CookieMng.CurrentCookie);
return s;
}

 

Json数据处理
/// <summary>
/// 处理json数据,返回Dictionary对象
/// </summary>
/// <param name="jsondata"></param>
/// <returns></returns>
public static Dictionary < string , object > Deserialize( string jsondata)
{
JavaScriptSerializer serializer
= new JavaScriptSerializer();
Dictionary
< string , object > json = (Dictionary < string , object > )serializer.DeserializeObject(jsondata);
return json;
}
/// <summary>
/// 处理json数据,返回object对象
/// </summary>
/// <param name="jsondata"></param>
/// <returns></returns>
public static object [] DeserializeToObject( string jsondata)
{
JavaScriptSerializer serializer
= new JavaScriptSerializer();
object [] json = ( object [])serializer.DeserializeObject(jsondata);
return json;
}

 

Cookie的管理
public static class CookieMng
{
private static CookieContainer ccontainer;

/// <summary>
/// 静态构造函数
/// </summary>
static CookieMng()
{
ccontainer
= new CookieContainer();
}
/// <summary>
/// 获取当前的cookie
/// </summary>
public static CookieContainer CurrentCookie
{
get { return ccontainer; }
set { ccontainer = value; }
}
}

 

HttpHelper类
public class HttpHelper
{
#region 私有变量
private CookieContainer cc;
private string contentType = " application/x-www-form-urlencoded " ;
private 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 string userAgent = " Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) " ;
private Encoding encoding = Encoding.GetEncoding( " utf-8 " );
private int delay = 3000 ;
private int maxTry = 3 ;
private int currentTry = 0 ;
#endregion


public static FrmValidateCode frmValidateCode;
#region 属性
/// <summary>
/// Cookie容器
/// </summary>
public CookieContainer CookieContainer
{
get
{
return cc;
}
}

/// <summary>
/// 获取网页源码时使用的编码
/// </summary>
/// <value></value>
public Encoding Encoding
{
get
{
return encoding;
}
set
{
encoding
= value;
}
}

public int NetworkDelay
{
get
{
Random r
= new Random();
return (r.Next(delay / 1000 , delay / 1000 * 2 )) * 1000 ;
}
set
{
delay
= value;
}
}

public int MaxTry
{
get
{
return maxTry;
}
set
{
maxTry
= value;
}
}
#endregion

#region 构造函数
/// <summary>
/// Initializes a new instance of the <see cref="HttpHelper"/> class.
/// </summary>
public HttpHelper()
{
cc
= new CookieContainer();
}

/// <summary>
/// Initializes a new instance of the <see cref="HttpHelper"/> class.
/// </summary>
/// <param name="cc"> The cc. </param>
public HttpHelper(CookieContainer cc)
{
this .cc = cc;
}

/// <summary>
/// Initializes a new instance of the <see cref="HttpHelper"/> class.
/// </summary>
/// <param name="contentType"> Type of the content. </param>
/// <param name="accept"> The accept. </param>
/// <param name="userAgent"> The user agent. </param>
public HttpHelper( string contentType, string accept, string userAgent)
{
this .contentType = contentType;
this .accept = accept;
this .userAgent = userAgent;
}

/// <summary>
/// Initializes a new instance of the <see cref="HttpHelper"/> class.
/// </summary>
/// <param name="cc"> The cc. </param>
/// <param name="contentType"> Type of the content. </param>
/// <param name="accept"> The accept. </param>
/// <param name="userAgent"> The user agent. </param>
public HttpHelper(CookieContainer cc, string contentType, string accept, string userAgent)
{
this .cc = cc;
this .contentType = contentType;
this .accept = accept;
this .userAgent = userAgent;
}
#endregion

#region 公共方法
/// <summary>
/// 获取指定页面的HTML代码
/// </summary>
/// <param name="url"> 指定页面的路径 </param>
/// <param name="postData"> 回发的数据 </param>
/// <param name="isPost"> 是否以post方式发送请求 </param>
/// <param name="cookieCollection"> Cookie集合 </param>
/// <returns></returns>
public string GetHtml( string url, string postData, bool isPost, CookieContainer cookieContainer)
{
if ( string .IsNullOrEmpty(postData))
{
return GetHtml(url, cookieContainer);
}
currentTry
++ ;
try
{
byte [] byteRequest = Encoding.Default.GetBytes(postData);

HttpWebRequest httpWebRequest;
httpWebRequest
= (HttpWebRequest)HttpWebRequest.Create(url);
httpWebRequest.CookieContainer
= cookieContainer;
httpWebRequest.ContentType
= contentType;
httpWebRequest.Referer
= url;
httpWebRequest.Accept
= accept;
httpWebRequest.UserAgent
= userAgent;
httpWebRequest.Method
= isPost ? " POST " : " GET " ;
httpWebRequest.ContentLength
= byteRequest.Length;

Stream stream
= httpWebRequest.GetRequestStream();
stream.Write(byteRequest,
0 , byteRequest.Length);
stream.Close();

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

currentTry
= 0 ;

if (html.Contains( " validateCode " ))
{
if ( string .IsNullOrEmpty(QQ.FriendQQ))
{
QQ.FriendQQ
= QQ.CurrentQQ;
}
if (frmValidateCode == null )
{
frmValidateCode
= new FrmValidateCode(); // 将主窗体对象传递过去
frmValidateCode.ShowDialog();
}
else
{
frmValidateCode.Activate();
if ( ! frmValidateCode.Visible)
{
frmValidateCode.ShowDialog();
}
}
return null ;
}
new Log().WriteLog(html); // 记录每一次请求的html代码
return html;
}
catch (Exception e)
{
// Console.ForegroundColor = ConsoleColor.Red;
// Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + e.Message);
// Console.ForegroundColor = ConsoleColor.White;

// if (currentTry <= maxTry)
// {
// GetHtml(url, postData, isPost, cookieContainer);
// }

// currentTry = 0;
return string .Empty;
}
}

/// <summary>
/// 获取指定页面的HTML代码
/// </summary>
/// <param name="url"> 指定页面的路径 </param>
/// <param name="cookieCollection"> Cookie集合 </param>
/// <returns></returns>
public string GetHtml( string url, CookieContainer cookieContainer)
{
Thread.Sleep(NetworkDelay);

currentTry
++ ;

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

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

currentTry
= 0 ;
if (html.Contains( " validateCode " ))
{
if ( string .IsNullOrEmpty(QQ.FriendQQ))
{
QQ.FriendQQ
= QQ.CurrentQQ;
}
if (frmValidateCode == null )
{
frmValidateCode
= new FrmValidateCode(); // 将主窗体对象传递过去
frmValidateCode.ShowDialog();
}
else
{
frmValidateCode.Activate();
if ( ! frmValidateCode.Visible)
{
frmValidateCode.ShowDialog();
}
}
return null ;
}
return html;
}
catch (Exception e)
{
// Console.ForegroundColor = ConsoleColor.Red;
// Console.WriteLine(DateTime.Now.ToString("HH:mm:ss ") + e.Message);
// Console.ForegroundColor = ConsoleColor.White;

// if (currentTry <= maxTry)
// {
// GetHtml(url, cookieContainer);
// }

// currentTry = 0;
return string .Empty;
}
}

/// <summary>
/// 获取指定页面的HTML代码
/// </summary>
/// <param name="url"> 指定页面的路径 </param>
/// <returns></returns>
public string GetHtml( string url)
{
return GetHtml(url, cc);
}

/// <summary>
/// 获取指定页面的HTML代码
/// </summary>
/// <param name="url"> 指定页面的路径 </param>
/// <param name="postData"> 回发的数据 </param>
/// <param name="isPost"> 是否以post方式发送请求 </param>
/// <returns></returns>
public string GetHtml( string url, string postData, bool isPost)
{
return GetHtml(url, postData, isPost, cc);
}

/// <summary>
/// 获取指定页面的Stream
/// </summary>
/// <param name="url"> 指定页面的路径 </param>
/// <param name="postData"> 回发的数据 </param>
/// <param name="isPost"> 是否以post方式发送请求 </param>
/// <param name="cookieCollection"> Cookie集合 </param>
/// <returns></returns>
public Stream GetStream( string url, CookieContainer cookieContainer)
{
currentTry
++ ;
try
{
HttpWebRequest httpWebRequest;
httpWebRequest
= (HttpWebRequest)HttpWebRequest.Create(url);
httpWebRequest.CookieContainer
= cookieContainer;
httpWebRequest.ContentType
= contentType;
httpWebRequest.Referer
= url;
httpWebRequest.Accept
= accept;
httpWebRequest.UserAgent
= userAgent;
httpWebRequest.Method
= " GET " ;

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

CookieCollection cc
= cookieContainer.GetCookies( new Uri(url));
return responseStream;
}
catch (Exception e)
{
Console.ForegroundColor
= ConsoleColor.Red;
Console.WriteLine(DateTime.Now.ToString(
" HH:mm:ss " ) + e.Message);
Console.ForegroundColor
= ConsoleColor.White;

if (currentTry <= maxTry)
{
GetHtml(url, cookieContainer);
}

currentTry
= 0 ;
return null ;
}
}
#endregion
}

  

下载  源代码下载

你可能感兴趣的:(qq)