VC POST表单——登录验证新浪邮箱
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启动和新建工程时,电脑都快要死机.....
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("邮箱用户名不能为空","提示");
- m_ctrUser.SetFocus();
- return;
- }
- if(m_strUser.Find("@sina") < 1){
- MessageBox("请先添加邮箱名的后缀,如@sina...","提示");
- m_ctrUser.SetFocus();
- return;
- }
- if(m_strPassword.IsEmpty()){
- MessageBox("邮箱密码不能为空","提示");
- 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; // 服务器返回大小
- 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);
- // 查找登录时服务器时返回的信息
- 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
转载于:https://www.cnblogs.com/firecode/p/4161001.html
VC POST表单——登录验证新浪邮箱相关推荐
- 表单提交验证新实践之class-validator
class-validator实践篇 之前有一篇关于class-validator的基础的介绍,这篇来一下如何实践: 首先介绍一下业务背景:简单来说就是一个表单提交 ,根据类型的选择进行四种提交模式. ...
- web实验新浪邮箱、下拉小说列表、验证用户登录
html.css.js 新浪邮箱 下拉小说列表 验证用户登录 新浪邮箱 1.制作以下的新浪 邮箱登录界面: 要求: 1)首先给文本框制作细边框样式,当鼠标放在文本框上时,输入框的边框颜色发生变化,当鼠 ...
- js登录特效+ajax提交表单+异步刷新验证
今天成功测试一种js登录特效+ajax提交表单+异步刷新验证,登录时特效提醒,无刷新ajax提交表单,获取验证结果,跳转正式页面:废话不多说,先直接分享代码: 1.主界面index.php 加载的这 ...
- 新工具:表单/Cookie 验证网站爬网设置工具
在今年3月份的blog里面,我曾经说过SharePoint Team将会发布一个补丁来让SharePoint Server 2007的搜索引擎支持对基于表单/Cookie验证的网站进行爬网.今天,Sh ...
- 在ASP.NET中如何用C#.NET实现基于表单的验证
这篇文章引用到了Microsoft .NET类库中的以下名空间: System.Data.SqlClient System.Web.Security ------------------------- ...
- [转]在ASP.NET中如何用C#.NET实现基于表单的验证(二)
(五)创建Logon.aspx页面 1.在已创建好的项目里创建一个新的Web 窗体,名为Logon.aspx. 2.在编辑器里打开Logon.aspx,切换到HTML视图. 3.复制下面代码,然后在编 ...
- EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法
带参提交一次查询,从服务器加载新数据.这是一个神奇的方法 $('#dg').datagrid('load',{code: '01',name: 'name01' }); easyui修改操作的回显方法 ...
- EasyUI加zTree使用解析 easyui修改操作的表单回显方法 验证框提交表单前验证 datagrid的load方法...
带参提交一次查询,从服务器加载新数据.这是一个神奇的方法 $('#dg').datagrid('load',{code: '01',name: 'name01' }); easyui修改操作的回显方法 ...
- springsecurity不拦截某个接口_SpringSecurity 默认表单登录页展示流程源码
SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程,涉及1.FilterSecurityIntercepto ...
最新文章
- WINCE下如何虚拟多个串口
- 成功解决Python中出现的TypeError: object of type 'zip' has no len()
- 计算机控制技术汤楠课后答案,西安电子科大版汤楠计算机控制技术6章
- JAVA格式化当前日期或者取年月日
- shell远程执行命令
- html5离开网页自动暂停,通过html5代码在网页中实现播放和暂停音乐mp3,mav等文
- 销售额分布直方图和茎叶图
- python3--匿名函数
- 施耐德电气的 Modicon PLC 中被曝严重漏洞,已有缓解措施
- VS2015搭建汇编语言环境和代码高亮插件AsmDude
- 日语学习 「バージョン」 version と 「リビジョン」 revision
- ASP.NET Core 部署到Cont OS 服务器
- Atitit ocr的艺术 艾提拉著 目录 1. OCR可以说是一门非常“古老”的技术,在上世纪50年代到90年代,	1 1.1. 场景文字识别技术(Scene Text Recognition,
- vb改动microsip让microsip隐藏然后命令拨打电话
- 基于开源框架urule的规则引擎
- pdf文件如何转换成dwg文件
- 乐华娱乐向港交所提交上市申请:2021年赚4亿元,韩庚亦是股东
- Hyperledger Fabric Service Discovery CLI(服务发现命令行工具)学习笔记
- java全角数字_Java全角、半角字符的关系以及转换
- 【转】王阳明:耐住寂寞,守得花开
热门文章
- java调用ocx控件获取数据_Java调用ocx控件以及dll
- 设计模式(现在只总结了常用的8种)
- 不是天才的我们,想要一次性过2019年一级建造师,过来人经验告诉你
- MybatisPlus分表
- php中怎么取出数组中的值,php怎么取出数组内指定的值
- python类的析构方法是什么_python类的析构方法是什么_python类析构
- 前端女娲补天 前端(一) 前端性能的优化方式
- c语言250行游戏代码大全,最经典的PASCAL游戏!300行程序代码,超爽!
- 3GPP协议学习-TS 38.211-NR;物理信道与调制
- 提取加密文件中的pdf