日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

WinInet + MFC 写vc驿站助手

發(fā)布時間:2024/3/7 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinInet + MFC 写vc驿站助手 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
春節(jié)期間,花了好幾天的功夫編碼與測試,才算勉強release......

利用WinInet + MFC編寫,現(xiàn)在主要講解一下原理:

備注信息: 論壇測試賬號(username: cctry_good / uid: 22983),以下內(nèi)容經(jīng)Syc老大允許后才得以修改更正!

(可以用來掛論壇的在線時間!)

運行主界面:


簽到提示:


回復(fù)貼子:





1、論壇WEB程序相關(guān)知識:

? ?? A、MFC如何提交表單:
? ? 這個之前在也有兩貼子(含源碼)介紹了利用WinInet如何模擬WEB提交表單,有興趣的可以看看!
? ?? VC POST表單模擬登錄新浪郵箱 ? ?? 利用WinInet查詢考生信息

? ? B、論壇WEB程序必備:
? ? username??用戶名
? ? uid? ?? ?? ?? ?用戶名對應(yīng)的唯一標示ID
? ? formhash??登錄后唯一標示
? ?? Omnipeek ?網(wǎng)絡(luò)抓包工具
? ?? Fiddler2 ? ???Web調(diào)試工具 (推薦)

? ? C、會員信息獲取辦法:
? ? 這里就用到了uid,當然你也可以換成 username-cctry_good 其實發(fā)現(xiàn)也可以!

? ? 當然如果你是 正則表達式 方面的大師,取這個頁中的數(shù)據(jù)就容易多了!反之,如果不熟悉正則的童鞋,你可以使用CString::Find、Mid等函數(shù)來獲取。

? ? 個人空間的頁面如下:
? ???(1)? http://www.cctry.com/space-uid-22983.html ?
? ???(2)? http://www.cctry.com/home-space-uid-22983-do-profile.html

2、WEB數(shù)據(jù)描述:

? ? 關(guān)于 HTTP協(xié)議 ,我也不想多做解釋,說簡單一點,就是 本機事先組織一串有規(guī)律的Buffer通過系統(tǒng)網(wǎng)絡(luò)模塊,提交給WEB后臺的IIS程序,然后IIS來解析這段HTTP數(shù)據(jù)包,再返回一個Buffer給你(一般這個Buffer[即網(wǎng)頁源碼],由IE等瀏覽器來解析成網(wǎng)頁),然后就完成了一次通信 。下面這些都是由抓包工具得來:

? ?? A、登錄數(shù)據(jù)包格式:
  • POST /member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&inajax=1 HTTP/1.1
  • Content-Type: application/x-www-form-urlencoded
  • User-Agent: Test
  • Host: www.cctry.com
  • Content-Length: 105
  • Pragma: no-cache

  • username=cctry_good&cookietime=2592000&password=123456&quickforward=yes&handlekey=ls&questionid=0&answer=
  • 復(fù)制代碼 “User-Agent” 就是 CInternetSession構(gòu)造函數(shù)的第一個參數(shù),默認為空(即為工程名)。

    ? ?? B、退出論壇與清除痕跡的數(shù)據(jù)包格式:
    ? ?? ?? ?這里要提到的是formhash后面的一個字符串,我對WEB編程不了解,沒法用專業(yè)的術(shù)語來形容,在此就這樣描述吧:它是論壇會員登錄后唯一的標示,以后退出、簽到、發(fā)貼等等操作會用到它。

    通過讀取論壇首頁,即可獲取到formhash值:
  • GET /forum.php HTTP/1.1
  • User-Agent: Test
  • Host: www.cctry.com
  • 復(fù)制代碼 退出論壇的數(shù)據(jù)包格式:
  • GET /member-logging-action-logout-formhash-e9c11601.html HTTP/1.1
  • User-Agent: Test
  • Host: www.cctry.com
  • 復(fù)制代碼 清除痕跡的數(shù)據(jù)包格式:
  • GET /member-clearcookies-formhash-e9c11601.html HTTP/1.1
  • User-Agent: Test
  • Host: www.cctry.com
  • 復(fù)制代碼 C、簽到的數(shù)據(jù)包格式:
    ? ?? ?? ?以下為簽到時的數(shù)據(jù)包格式,后面會用到formhash,及其他表單選項:
  • POST/plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1&inajax=1 HTTP/1.1
  • Content-Type: application/x-www-form-urlencoded
  • User-Agent: Test
  • Host: www.cctry.com
  • Content-Length: 103
  • Pragma: no-cache

  • formhash=e9c11601&qdxq=kx&qdmode=1&todaysay=Hello+World+%21+By+%E6%E4%D5%BE%D6%FA%CA%D6v1.0&fastreply=1
  • 復(fù)制代碼 3、部分代碼

    ? ? 這里之所以不放Src,主要有兩方面: 防止論壇水貼泛濫影響氣氛 、根據(jù)以上筆記自行編寫來同時 提高童鞋們動手能力

    ? ? OK,回正題吧!下面為部分代碼,僅供參考:

    A、全局變量:
  • //
  • // 用戶權(quán)限 (這里根據(jù)用戶組的ID來顯示用戶組,因為剛那是數(shù)組下標)
  • const TCHAR *g_szGroupInfo[] = {
  • ? ?? ???_T("無"),_T("管理員"),_T("超級版主"),_T("版主"),_T("禁止發(fā)言"),? ?? ?? ?? ?? ?? ?? ?? ???// 0-4
  • ? ?? ???_T("禁止訪問"),_T("禁止IP"),_T("游客"),_T("等待驗證會員"),_T("乞丐"),? ?? ?? ?? ?? ? // 5-9
  • ? ?? ???_T("新手上路"),_T("注冊會員"),_T("中級會員"),_T("高級會員"),_T("金牌會員"),? ?? ?// 10-14
  • ? ?? ???_T("論壇元老"),_T("普通會員"),_T("銀牌會員"),_T("銅牌會員")};? ?? ?? ?? ?? ?? ?? ?? ?? ?// 15-18

  • //
  • // 線程同步
  • CMutex g_Mutex;

  • //
  • // 模擬訪問貼子ID
  • int? ?? ?? ?? ?? ? g_nUID = 1;

  • //
  • // 宏定義
  • #define TIMER_LEN? ?? ???(60000 * 5)? ?? ?? ?? ?? ? // 5分鐘刷新一次
  • #define MAX_UID? ?? ?? ???14911? ?? ?? ?? ?? ?? ?? ? // 最大貼子數(shù)量? ?? ???
  • 復(fù)制代碼 B、其他數(shù)據(jù)類型、宏定義:
  • //
  • // 登錄結(jié)果
  • enum EnumResult
  • {
  • ? ?? ???ER_LOGIN_FAILED? ???= 0,? ?? ???// 登錄失敗
  • ? ?? ???ER_LOGIN_SUCCESS??= 1,? ?? ???// 登錄成功
  • ? ?? ???ER_FIFTEEN_LATER? ? = 2,? ?? ???// 15分鐘后再試
  • ? ?? ???ER_NETWORK_ERR? ? = 3,? ?? ???// 其他網(wǎng)絡(luò)錯誤
  • ? ?? ???ER_NULL? ?? ?? ?? ?? ?? ? = 0xFF? ?// 無
  • };

  • #define WM_ICON_NOTIFY??WM_USER+10? ?? ???// 托盤消息
  • 復(fù)制代碼 C、主窗口類的成員變量與成員函數(shù):
  • class CTestDlg : public CDialog
  • {
  • // Construction
  • public:
  • ? ? CTestDlg(CWnd* pParent = NULL);? ? // standard constructor

  • ? ? // 以下函數(shù)用途:登錄、注銷、重新登錄.
  • ? ? EnumResult? ? LoginServer(CString? ? strUser,CString strPass,CString & strErrMsg/* = _T("")*/);
  • ? ? void? ?? ???LoginOff();
  • ? ? void? ?? ???ReLogin();

  • ? ? // 以下函數(shù)用途:獲取hash、遍歷訪問貼子、清空用戶信息.
  • ? ? CString? ?? ???GetFormHash();
  • ? ? BOOL? ?? ???InitFromHomePage();
  • ? ? void? ?? ???ClearInfo(CString strMsg = _T("--"));

  • ? ? //??以下函數(shù)用途:獲取用戶基本信息、在線時間、簽到.
  • ? ? BOOL? ?? ???GetUserInfo(CString strName);
  • ? ? BOOL? ?? ???GetGroupANDTime(CString? ? strName);
  • ? ? BOOL? ?? ???MemberSignIn();

  • ? ? // 以下函數(shù)用途:分別啟動遍歷貼子以提高在線時間、
  • ? ? //? ?? ?? ?? ?? ?登錄、注銷、簽到線程.
  • ? ? //? ?? ?? ?? ?? ?<設(shè)置高優(yōu)先級,線程同步處理>
  • ? ? void? ? StartThreadGetInfo();
  • ? ? void? ? StartLoginThread();
  • ? ? void? ? StartLoginOffThread();
  • ? ? void? ? StartSignInThread();

  • ? ? // 以下函數(shù)用途:對應(yīng)上面四個線程的實線
  • ? ? static DWORD WINAPI ThreadToGetInfo(LPVOID);
  • ? ? static DWORD WINAPI ThreadToLogin(LPVOID);
  • ? ? static DWORD WINAPI ThreadToLoginOff(LPVOID);
  • ? ? static DWORD WINAPI ThreadToSignIn(LPVOID);

  • public:
  • ? ? CInternetSession*? ???m_pSession;
  • ? ? CHttpConnection*? ? m_pConnection;
  • ? ? CHttpFile*? ?? ?? ?? ?? ? m_pFile;

  • ? ? HANDLE? ?? ?? ?? ?? ? m_hInitHomePage;? ?? ?// 定時器線程 —— 刷新在線時間
  • ? ? HANDLE? ?? ?? ?? ?? ? m_hLoginThread;? ?? ?? ?// 登錄線程?
  • ? ? HANDLE? ?? ?? ?? ?? ? m_hLoginOffThread;? ? // 注銷線程
  • ? ? HANDLE? ?? ?? ?? ?? ? m_hSignInThread;? ?? ? // 簽到線程

  • ? ? int? ?? ?? ?? ?? ?? ?? ???m_nLoginCount;? ?? ?? ???// 登錄次數(shù)
  • ? ? CString? ?? ?? ?? ?? ? m_strUID;? ?? ?? ?? ?? ?? ?? ?// 會員UID
  • ? ? CString? ?? ?? ?? ?? ? m_strUserName;? ?? ?? ? // 會員用戶名
  • ? ? CString? ?? ?? ?? ?? ? m_strPassWord;? ?? ?? ???// 會員密碼
  • ? ? CString? ?? ?? ?? ?? ? m_strErrMsg;? ?? ?? ?? ?? ?// 錯誤消息
  • ? ? CTrayIcon? ?? ?? ?? ?m_TrayIcon;? ?? ?? ?? ?? ? // 托盤圖標

  • ? ? LRESULT OnTrayNotification(WPARAM wParam,LPARAM lParam);// 任務(wù)欄菜單消息回調(diào)函數(shù)
  • ? ? // ......
  • }
  • 復(fù)制代碼 OK,大家可以看到代碼量并不多!具體也規(guī)劃好了,有興趣的可以自已參考一下編寫試試!

    當前版本:V1.0
    更新內(nèi)容:
    1、增加手動回貼/定時回貼的功能,手動可回復(fù)論壇任意貼子,自動回貼僅僅tid=16196.
    2、增加保存/加載上次成功登錄的用戶密碼的功能.

    當前版本:V2.0
    更新內(nèi)容:
    1、修復(fù)登錄及回貼相關(guān)數(shù)據(jù)包
    2、修復(fù)CPU跑高的線程定時器代碼

    總結(jié)

    以上是生活随笔為你收集整理的WinInet + MFC 写vc驿站助手的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。