源碼在這裡:點選打開連結
這是我自己完成的QQ空間登入代碼,隻做到登入為止,後面沒有了。
下面有兩個版本,一個是windows應用,一個是控制台應用,具體如下。
代碼主要是包括通過Httpget(httpwebrequest方法)登入的,還包括了QQ密碼的最新加密算法2014年)
截圖如下:
1.windows應用版
2.控制台應用版本
展示下核心代碼吧:以下代碼是控制台版的主要代碼。完整源碼連結已經提供了,要的趕緊去下,才五分,不貴。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Drawing;
using System.Security.Cryptography;
using System.Net;
namespace testWebRequest
{
public class Program
{
public static String qq = "XXXXXX"; //自己填
private static String password = "XXXXXX"; //自己填
static void Main(String[] args)
{
QQLogin(qq, password);
}
public static void QQLogin(String QQ, String password)
{
String pass = "";
String responseData = "";
//擷取驗證資訊
//驗證資訊格式為:ptui_checkVC('0','!MIW','\x00\x00\x00\x00\x9a\x65\x0f\xd7')
//其中分為三部分,第一個值0或1判斷是否需要圖檔驗證碼
// 第二個值是預設驗證碼,若不需要圖檔驗證碼,就用此驗證碼來送出
// 第三部分是所使用的QQ号碼的16進制形式
String forCheckUrl = "http://check.ptlogin2.qq.com/check?uin=" + QQ + "&appid=549000912&r=0.10299430438317358";
RetData outcomeFromCheck = new RetData();
CookieContainer cookieNull = new CookieContainer();
HttpHelper helper = new HttpHelper();
String receiveFromCheck;
outcomeFromCheck = helper.GetHtml(forCheckUrl, cookieNull);
receiveFromCheck = outcomeFromCheck.str;
//Console.WriteLine(receiveFromCheck); //列印擷取的網頁内容
//将驗證碼資訊的三部分存入數組
int checkCodePosition = receiveFromCheck.IndexOf("(") + 1;
String checkCode = receiveFromCheck.Substring(checkCodePosition, receiveFromCheck.LastIndexOf(")") - checkCodePosition);
String[] checkNum = checkCode.Replace("'", "").Split(','); //驗證碼數組
if ("1".Equals(checkNum[0])) //判斷是否需要圖檔驗證碼
{
String forImageUrl = "http://captcha.qq.com/getimage?aid=549000912&uin=" + QQ + "&cap_cd=" + checkNum[1];
Stream receiveStream = helper.GetStream(forImageUrl, outcomeFromCheck.cookie);
//将擷取的圖檔驗證碼存入電腦
System.Drawing.Image.FromStream(receiveStream).Save(@"d:/code.jpg");
//Image img = Image.FromStream(receiveStream);
Console.Write("請輸入驗證碼:");
responseData = Console.ReadLine(); //将讀取到的圖檔驗證碼輸入到responseData中,由于是控制台應用
}
else //若不需圖檔驗證碼,驗證碼就等于checkNum[1]
{
responseData = checkNum[1];
}
//擷取加密密碼
PasswordHelper helper2 = new PasswordHelper();
pass = helper2.GetPassword(QQ, password, responseData);
//Console.WriteLine(pass);
/** *********************** 登入 *************************** */
String forLoginUrl = "http://ptlogin2.qq.com/login?u=" + QQ + "&verifycode=" + responseData + "&p=" + pass + "&aid=549000912&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&h=1&t=1&g=1&from_ui=1&pt;
RetData outcomeFromLogin = new RetData();
outcomeFromLogin = helper.GetHtml(forLoginUrl, outcomeFromCheck.cookie);
String revFromLogin = outcomeFromLogin.str;
Console.WriteLine(revFromLogin); //列印登入後傳回資訊
//至此登入成功
//傳回個人空間首頁
RetData outcomeFromIndexPage = new RetData();
outcomeFromIndexPage = helper.GetHtml("http://user.qzone.qq.com/"+qq, outcomeFromLogin.cookie);
//Console.WriteLine(outcomeFromIndexPage[0].str); //顯示首頁内容
//将首頁存到txt裡
StreamWriter swrite = new StreamWriter("E:/11.txt", false, Encoding.UTF8);
swrite.WriteLine(outcomeFromIndexPage.str);
swrite.Close();
swrite.Dispose();
//周遊CookieContainer
//GetCookieContent showCookies = new GetCookieContent();
//showCookies.ShowAllCookies(outcomeFromLogin[0].cookie);
}
}
public struct RetData //網頁請求傳回對象
{
public string str;
public CookieContainer cookie;
}
}
完整源碼位址: http://download.csdn.net/detail/lai444132348/7266331