1、本机环境:

Windows XP SP3、ADSL

2、开发工具:

WildPackets OmniPeek V5.1.4

Visual C++ 6.0

IE6.0

FlexEdit V2.3.1871

假设认为OmniPeek文件太大不方面下载的朋友,能够使用开源的简易抓包分析工具,先登录codeproject,再单击此处開始下载或邮件给我索取源代码 (ningyusky@tom.com 或 koma0769@vip.qq.com

注意:假设没有登录codeproject的话是无法下载的,你能够自行改动该工具源代码,将每一步GET、POST等动作的数据所有记录于某文件,以便查看分析之.....

我就是如此,由于我的硬件配置不是非常“主流”的,所以每次OmniPeek启动和新建project时,电脑都快要死机.....

3、程序执行效果:

4、源代码说明:

虽如此短短一百余行的代码,但我在debug下调试了三个多小时才攻克了这里每一处存在或可能存在的错误,希望能够与大家交流共同探讨......

/************************************************************************/
/* 函数说明:模拟POST表单——登录新浪邮箱
/* 參 数:无
/* 返 回 值:无
/* By:Koma 2009.10.16 10:18
/************************************************************************/
void CSinaDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData(TRUE);
if(m_strUser.IsEmpty()){
MessageBox("邮箱username不能为空","提示");
m_ctrUser.SetFocus();
return;
}

if(m_strUser.Find("@sina") < 1){
MessageBox("请先加入邮箱名的后缀,如@sina...","提示");
m_ctrUser.SetFocus();
return;
}

if(m_strPassword.IsEmpty()){
MessageBox("邮箱password不能为空","提示");
m_ctrUser.SetFocus();
return;
}

char szAccept[] = "Accept: */*";
char szReferer[] = "Referer: http://mail.sina.com.cn//r/n";
CString szFormData = "domain=sina.cn&logintype=uid&u="+ m_strUser +"&domain=sina.com&psw="+ m_strPassword +"&btnloginfr";

HINTERNET hSession;
HINTERNET hConnect;
HINTERNET hRequest;
BOOL bReturn = FALSE;

// 之前使用Socket,如今使用Wininet相关API建立链接
hSession = InternetOpen("InetAll",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
hConnect = InternetConnect(hSession,"mail.sina.com.cn",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,1);
hRequest = HttpOpenRequest(hConnect,"POST","cgi-bin/login.cgi",NULL,"http://www.sina.com.cn",(LPCSTR *)&szAccept,INTERNET_FLAG_RELOAD,1);

// 提交数据表单
LPVOID pBuf = (LPVOID)szFormData.GetBuffer(szFormData.GetLength());
bReturn = HttpSendRequest(hRequest,"Content-Type: application/x-www-form-urlencoded/r/n",-1,pBuf,szFormData.GetLength());
if(!bReturn)
{
MessageBox("发送Http请求失败!","提示",MB_ICONERROR | MB_OK);
return;
}

char szRecvBuf[1024]; // 接受数据缓冲区
DWORD dwNumberOfBytesRead; // server返回大小
DWORD dwRecvTotalSize=0; // 接受数据总大小
DWORD dwRecvBuffSize=0; // 接受数据buf的大小
CFile m_File; // 将返回数据写入文件
CString strTemp; // 暂时消息框

m_File.Open("RecvData.tmp",CFile::modeWrite | CFile::modeCreate,NULL);
memset(szRecvBuf,0,1024);

do
{
// 開始读取数据
bReturn = InternetReadFile(hRequest,szRecvBuf,1024,&dwNumberOfBytesRead);
if(!bReturn)
{
MessageBox("InternetReadFile Error !","提示",MB_ICONERROR | MB_OK);
break;
}

// 统计接受数据的大小
szRecvBuf[dwNumberOfBytesRead] = '/0';
dwRecvTotalSize += dwNumberOfBytesRead;
dwRecvBuffSize += strlen(szRecvBuf);

// 将缓冲区写入文件
m_File.Write(szRecvBuf,strlen(szRecvBuf));
m_File.Flush();
} while(dwNumberOfBytesRead !=0);

// 检查接受到的数据包是否完整
m_File.Close();
if(dwRecvTotalSize != dwRecvBuffSize)
{
MessageBox("接受数据时丢包,返回大小不一致!");
return ;
}

CString str=""; // 所有内容
CString strLine=""; // 单行内容
CStdioFile file; // 文件对象
if(!file.Open("RecvData.tmp",CFile::modeRead | CFile::typeText,NULL))
{
CString strTemp;
strTemp.Format("Open file error:%d",GetLastError());
MessageBox(strTemp);
return;
}

// 按行读取tmp所有内容
while(file.ReadString(strLine))
{
str = str + strLine;
}
file.Close();
wchar_t* pWChar = NULL;
DWORD nLen1;

// 将新浪网页UTF-8格式编码转换成Unicode
nLen1 = MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pWChar,0);
pWChar = new wchar_t[nLen1 + 1];
memset(pWChar,0,(nLen1 + 1 ) * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8,0,str,str.GetLength(),pWChar,nLen1);

char* pChar = NULL;
DWORD nLen2;

nLen2 = WideCharToMultiByte(CP_ACP,0,pWChar,nLen1,pChar,0,NULL,NULL);
pChar = new char[nLen2 + 1];
memset(pChar,0, nLen2 + 1);
WideCharToMultiByte(CP_ACP,0,pWChar,nLen1,pChar,nLen2,NULL,NULL);

// 查找登录时server时返回的信息
str.Format("%s",pChar);
if(str.Find("安全退出",0)>=1)
{
MessageBox("邮箱登录成功!","提示");
m_ctrUser.SetFocus();
}
else
{
MessageBox("邮箱登录失败!","提示",MB_ICONERROR | MB_OK);
m_ctrUser.SetFocus();
}

// 删除暂时文件、释放内存
DeleteFile("RecvData.tmp");
delete pChar;
delete pWChar;
}

 5、源代码下载地址

http://download.csdn.net/source/1747851

VC POST表单——登录验证新浪邮箱的更多相关文章

  1. js表单简单验证(手机号邮箱)

    1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncod ...

  2. AngularJS学习之 登录表单 清爽验证(边学边更新)

    注册过程的确好多需要验证的,但是注册成功之后的登录就简单多了, 只要用户 输入 用户名和密码, ajax向后台提交登录请求, 根据返回的结果确定用户名或者密码是否正确即可登录. 所以这个登录表单的验证 ...

  3. WEB安全讨论-表单登录是先验证验证码还是密码

    表单登录是先验证验证码还是密码? 肯定是验证码呀!!!这是毋庸置疑的.但是发现有人会验证密码,感觉先验证密码和先验证验证码是一个概念是一样的.但是其实是完全不一样的.下面我们来一起详细的剖析一下: 消 ...

  4. aspx中的表单验证 jquery.validate.js 的使用 以及 jquery.validate相关扩展验证(Jquery表单提交验证插件)

    这一期我们先讲在aspx中使用 jquery.validate插件进行表单的验证, 关于MVC中使用 validate我们在下一期中再讲     上面是效果,下面来说使用步骤 jQuery.Valid ...

  5. EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法

    带参提交一次查询,从服务器加载新数据.这是一个神奇的方法 $('#dg').datagrid('load',{ code: '01', name: 'name01' }); easyui修改操作的回显 ...

  6. easyui表单多重验证,动态设置easyui控件

    要实现的功能:在做添加学生信息的时候,利用easyui的验证功能判断 学号是否重复和学号只能为数字 最终效果如下图: 但在做这个的过程中,遇到了一系列的问题: 扩展validatebox的验证方法,最 ...

  7. 10款精美的HTML5表单登录联系和搜索表单

    1.HTML5/CSS3仿Facebook登录表单 这款纯CSS3发光登录表单更是绚丽多彩.今天我们要分享一款仿Facebook的登录表单,无论从外观还是功能上说,这款登录表单还是挺接近Faceboo ...

  8. HTML5表单及其验证

    随笔- 15 文章- 1 评论- 115 HTML5表单及其验证   HTML表单一直都是Web的核心技术之一,有了它我们才能在Web上进行各种各样的应用.HTML5 Forms新增了许多新控件及其A ...

  9. Spring Security 表单登录

    1. 简介 本文将重点介绍使用Spring Security登录. 本文将构建在之前简单的Spring MVC示例之上,因为这是设置Web应用程序和登录机制的必不可少的. 2. Maven 依赖 要将 ...

随机推荐

  1. 诺贝尔物理学奖公布:LED灯将点亮了整个21世纪

    很多其它精彩.破晓博客:点击打开链接 7日.在瑞典首都斯德哥尔摩,瑞典皇家科学院常任秘书诺尔马克(左二)宣布2014年诺贝尔物理学奖得主.新华社发 ■人物 中村修二 勇于追讨酬劳的科学家 被誉为&qu ...

  2. UVA 11768 - Lattice Point or Not(数论)

    UVA 11768 - Lattice Point or Not option=com_onlinejudge&Itemid=8&page=show_problem&categ ...

  3. MFC中模态对话框和非模态对话框的差别

    在MFC中有模态对话框和非模态对话框,那这两种有什么差别呢. 又都是用于什么场合呢. 首先,要弄清楚2种对话框是怎样创建的. 然后要弄清楚2种对话框有什么差别,可能从表面上看,模态会堵塞主对话框.可原 ...

  4. 内存分析工具 MAT 的使用

    1 内存泄漏的排查方法 Dalvik Debug Monitor Server (DDMS) 是 ADT插件的一部分,当中有两项功能可用于内存检查 : ·    heap 查看堆的分配情况 ·     ...

  5. .Net路(十三)导出数据库到EXCEL

    .NET出口Office文件(word,excel)有两种方法我明白.一个存储在导出的文件中server录以下.利用response输出到浏览器地址栏,直接打开:还有直接利用javascript来导出 ...

  6. WIP jobs available to MRP

    1. Supply 2. Demand 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  7. codeforces 112APetya and Strings(字符串水题)

    A. Petya and Strings 点击打开题目 time limit per test 2 seconds memory limit per test 256 megabytes input ...

  8. matlab secant method

    % Matlab script to illustrate the secant method % to solve a nonlinear equation % this particular sc ...

  9. HT for Web嵌入QtWebKit的client解决方式

    HTML5已经足够强大,但非常多应用还是须要独立桌面client的解决方式,毕竟能操作本地文件等功能还是非常多工具类软件短期内无法全然採用云方案替代. 近期Adobe公布的http://bracket ...

  10. zigbee学习:示例程序SampleApp中通讯流程

    zigbee学习:示例程序SampleApp中通讯流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考链接: http://wjf88223.bl ...