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 ...
随机推荐
- Js中的判空
1.JS 中判断 undefined JavaScript 中有两个特殊数据类型:undefined 和 null var test= undefined; if (typeof(test) == u ...
- document.write中输出html标签用法
输出HTML标签,只需将标签写入双引号: 示例:在网页中输出<p>革命还在继续</p> document.write("<p style='border:1px ...
- 代码规范V1.1
作业要求:[https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/993] 代码规范文档/代码规范执行记录:[https://coding. ...
- MAC安装python jupyter notebook
介绍: Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言. Jupyter Notebook 的本质是一个 Web 应用 ...
- sudo命令 和限制root 远程登陆
1.对sudo命令的配制,输入 visudo 然后,找到92行进行以下配制 以下就是效果 比如: 如果要同时给两个普通用户设置这样子的权限,就可以用另一种方式,下面这种方式不可取的 而是用这种 效果如 ...
- acm 2032
////////////////////////////////////////////////////////////////////////////////#include<iostream ...
- MySQL--Semi-join(半连接)优化策略
Semi-join(半连接)半连接主要场景:检查一个结果集(外表)的记录是否在另外一个结果集(字表)中存在匹配记录,半连接仅关注”子表是否存在匹配记录”,而并不考虑”子表存在多少条匹配记录”,半连接的 ...
- masterlab 敏捷项目管理工具
masterlab 是一个参考了gitlab 以及jira 的开源项目管理工具,基于php开发,同时官方也提供了一个 docker-compose 运行的项目 clone 代码 git clone ...
- 解决GitHub下载速度比较慢
第一步,打开本机上的Hosts文件 首先,什么是Hosts文件? 在互联网协议中,host表示能够同其他机器互相访问的本地计算机.一台本地机有唯一标志代码,同网络掩码一起组成IP地址,如果通过点到点协 ...
- C# HttpClient请求Webapi帮助类
引用 Newtonsoft.Json // Post请求 public string PostResponse(string url,string postData,out string status ...