vc++post方式登录网站
以http://www.idc3389.com为例:
效果图:

使用Fiddler工具进行抓包,截图:




可以发现:
1.并没有使用cookie并没有用作用户身份识别,因为登录前后的cookie并没有发生改变
如果使用cookie用于用户身份认证,则登录前后cookie肯定不同,以博客园为例:

2.Connection始终保持为keep-alive。也就是说客户端和服务器只建立了一次连接,后续的请求都是在当前连接的基础上,并没有重新新建连接。
代码:
向CHttpLoginTestDlg.h中的class CHttpLoginTestDlg 中加入
private:
// 获取一段字符串,通过它的左右字符串为参考
CString getMidStrByLeftAndRight(const CString &str, const CString &left, const CString &right);
private:
IWinHttpRequestPtr pHttpReq;
BOOL bLogined;
CHttpLoginTestDlg.cpp:
CHttpLoginTestDlg::CHttpLoginTestDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CHttpLoginTestDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
pHttpReq = NULL;
bLogined = FALSE;
} #import "C:\\Windows\\system32\\winhttp.dll" no_namespace void CHttpLoginTestDlg::OnBnClickedLoginButton()
{
CString username, passwd;
GetDlgItemText(IDC_EDIT_USER, username);
GetDlgItemText(IDC_EDIT_PASSWORD, passwd);
if (username.IsEmpty() || passwd.IsEmpty())
{
MessageBox(_T("用户名或密码不能为空"), _T("提示"));
return;
} HRESULT hr = pHttpReq.CreateInstance(__uuidof(WinHttpRequest));
if (FAILED(hr))
return; hr = pHttpReq->Open(_T("POST"), _T("http://www.idc3389.com/user/userlogin.asp"));
if (FAILED(hr))
return; // 设置相当关键 post提交数据时必须要
hr = pHttpReq->SetRequestHeader(_T("Content-Type"), _T("application/x-www-form-urlencoded"));
if (FAILED(hr))
return; // 拼接post表单数据
CString strBody;
strBody.Format(_T("username=%s&password=%s&x=12&y=10"),username, passwd);
COleVariant varBody = strBody;
hr = pHttpReq->Send(varBody);
if (FAILED(hr))
return; // 获得响应,
_variant_t varRspBody = pHttpReq->GetResponseBody();
//ULONG dataLen = varRspBody.parray->rgsabound[0].cElements; // 文本长度
char *pContentBuffer = (char*)varRspBody.parray->pvData;
CString rspStr;
rspStr = pContentBuffer;
if (rspStr.Find(_T("欢迎您:")) != -)
{
MessageBox(_T("登录成功"));
bLogined = TRUE;
} else
MessageBox(_T("登录失败"));
} void CHttpLoginTestDlg::OnBnClickedGetinfoButton()
{
if (!bLogined)
{
MessageBox(_T("尚未登录!请先登录!"), _T("提示"));
return;
} HRESULT hr = pHttpReq->Open(_T("GET"), _T("http://www.idc3389.com/user/modify.asp"));
if (FAILED(hr))
return;
hr = pHttpReq->Send();
if (FAILED(hr))
return; // 获得响应,
_variant_t varRspBody = pHttpReq->GetResponseBody();
//ULONG dataLen = varRspBody.parray->rgsabound[0].cElements; // 文本长度
char *pContentBuffer = (char*)varRspBody.parray->pvData;
CString rspStr;
rspStr = pContentBuffer;
//MessageBox(rspStr); CString username = getMidStrByLeftAndRight(rspStr, _T("id=\"truename\" value=\""), _T("\""));
CString email = getMidStrByLeftAndRight(rspStr, _T("id=\"email\" value=\""), _T("\""));
CString addr = getMidStrByLeftAndRight(rspStr, _T("id=\"address\" value=\""), _T("\""));
CString tel = getMidStrByLeftAndRight(rspStr, _T("id=\"tel\" value=\""), _T("\""));
SetDlgItemText(IDC_STATIC_NAME, username);
SetDlgItemText(IDC_STATIC_ADDR, addr);
SetDlgItemText(IDC_STATIC_EMAIL, email);
SetDlgItemText(IDC_STATIC_TEL, tel); } CString CHttpLoginTestDlg::getMidStrByLeftAndRight(const CString &str, const CString &left, const CString &right)
{
CString ret;
int posLeft = -, posRight = -;
posLeft = str.Find(left);
if (posLeft == -)
return ret; posLeft += left.GetLength(); // 所求字符串的起始位置
posRight = str.Find(right, posLeft); // 所求字符串的结束位置
if (posRight == -)
return ret;
ret = str.Mid(posLeft, posRight - posLeft);
return ret; }
vc++post方式登录网站的更多相关文章
- vc++使用cookie登录网站
以http://www.idc816.com为例 效果图: 1)先登录获取cookie,再使用cookie获取用户信息 2)记录cookie,关闭程序后重新运行程序,直接获取用户信息 使用Fiddle ...
- .NET C#使用微信公众号登录网站
适用于:本文适用于有一定微信开发基础的用户 引言:花了300大洋申请了微信公众平台后,发现不能使用微信公众号登录网站(非微信打开)获得微信帐号.仔细研究后才发现还要再花300大洋申请微信开放平台才能接 ...
- Winform模拟post请求和get请求登录网站
引言 最近有朋友问如何用winform模拟post请求,然后登录网站,稍微想了一下,大致就是对http报文的相关信息的封装,然后请求网站登录地址的样子.发现自己的博客中对这部分只是也没总结,就借着这股 ...
- Google谷歌搜索引擎登录网站 - Blog透视镜
建置好了网站之后,为了能提升流量或是增加曝光度,Mix通常会到Google谷歌,用手动登录的方式,登录网站,不久之后,搜索引擎就会派遣蜘蛛机器人,来检索你的网站,等一段时间之后,就会出现在搜索引擎内, ...
- 配置SAP GUI FOR HTML(通过WEB方式登录)
配置SAP GUI FOR HTML(通过WEB方式登录) SAP系统可以通过安装 SAP GUI.SAP GUI FOR JAVA.SAP GUI WEB FOR JAVA.SAP GUI FOR ...
- 用libcurl 登录网站
libcurl 可以发送和接收HTTP消息,因此可以发送用户名.密码和验证码来登录网站,网上有不少这方面的内容,但不甚完整,我摸索了两天,将其中要点记录下来. 基本步骤 正常访问登录页面,访问时,设置 ...
- 用c#开发微信 (20) 微信登录网站 - 扫描二维码登录
像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 1 创建网站应用 在微信开放平台创建一个网站应用 https:// ...
- c#使用WebClient登录网站抓取登录后的网页
C#登录网站实际上就是模拟浏览器提交表单,然后记录浏览器响应返回的会话Cookie值,再次发送请求时带着这个会话cookie值去请求就可以实现模拟登录的效果了. 如下类CookieAwareWebCl ...
- 已授予账号 "以服务方式登录"的权限
已授予账号.\Cliff "以服务方式登录"的权限 --------------------------------------------------- 进入服务管理器(Serv ...
随机推荐
- Java当中的JVM
Java当中JVM 01 在使用控制面板时的实质: Hello.java使用javac,然后变成为Hello.class通过运行java这个命令,在类加载器中(含有加载,验证,准备,解析,初始化,使用 ...
- 洛谷P1415 拆分数列(dp)
题目链接:传送门 题目: 题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输 ...
- inner join 与一般笛卡尔积的区别
inner join 与一般笛卡尔积的区别:inner join是笛卡尔积的特殊形式.如果有表a和表b,表a有m条记录,表b有n条记录,则一般笛卡尔积后得到的记录条数是m*n条,记录之间的组合是随意的 ...
- HDU 1160:FatMouse's Speed(LIS+记录路径)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 实验吧—Web——WP之 简单的sql注入之2
直接打开解题连接: 既然是SQL注入,那么我们就要构造注入语句了,这个就要有耐心一个一个去尝试了 输入语句 1'and 1=1 # 和 1'and/**/1=1/**/#后 对比一下,发现是过滤掉了空 ...
- 【HDOJ1598】【枚举+最小生成树】
http://acm.hdu.edu.cn/showproblem.php?pid=1598 find the most comfortable road Time Limit: 1000/1000 ...
- 简单的Windows应用程序命名规则
读书:<高质量C++编程指南> 作者对“匈牙利”命名规则做了合理的简化,下述的命名规则简单易用,比较适合于Windows应用软件的开发. l [规则3-2-1]类名和函数名用大写字母开头的 ...
- 我的TDD实践---TDD概念篇
“我的TDD实践”系列之TDD概念篇 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...
- Java数组逆序排列
//逆序排列原理 /* A: 数组逆序原理* a: 题目分析* 通过观察发现,本题目要实现原数组元素倒序存放操作.即原数组存储元素为{12,69,852,25,89,588},逆序后为原数组存储元素变 ...
- KMPlayer速度步进设置及快捷键设置和同级视频自动加入播放列表
速度步进设置 快捷键设置 同级视频自动加入播放列表