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 ...
随机推荐
- File available()方法
File类中的length()方法与IO中InputStream类中的available()方法功能重复? 只是返回值类型不同 前者返回long后者返回int 但本质上都一样表示文件的字节数 a ...
- Arcgis API本地化
①将API文件夹复制到该目录下C:\Program Files\ArcGIS\Server\framework\runtime\tomcat\webapps ②打开API文件夹中的init.js文件( ...
- Linux Distribution 分支
https://distrowatch.com/ DistroWatch是一个包含了各种Linux发行版及其他自由/开放源代码的类Unix操作系统的新闻.人气排名.以及其他一般信息等的网站.它包含了数 ...
- 第一个程序HelloWorld及常见问题解决和练习
public class hello world{ public static void main(String[] args){ System.out.println(); } } 注意事项: 源文 ...
- Apache Kafka 源码剖析
Getting Start 下载 http://kafka.apache.org/ 优点和应用场景 Kafka消息驱动,符合发布-订阅模式,优点和应用范围都共通 发布-订阅模式优点 解耦合 : 两个应 ...
- 世界各个地区WIFI 2.4G及5G信道划分表(附无线通信频率分配表)
参考:https://blog.csdn.net/dxpqxb/article/details/80969760 目前主流的无线WIFI网络设备802.11a/b/g/n/ac: 传统 802.11 ...
- Cobbler自动装机--2
自动重装工具--koan 客户机已经通过cobbler安装centos7系统完毕. 安装koan,能实现重装,安装之前先安装epel源 koan是kickstart-over-a-network的缩 ...
- iuplua test failure
prepared SW Download from https://sourceforge.net/projects/iup zerobrane Step Write follwiing codes ...
- e生保plus
e生保plus https://m.health.pingan.com/share/products/esb_plus.html?re_from=qdlmMSDbxtj&order_from= ...
- jquery 实现的全选demo
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...