以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方式登录网站的更多相关文章

  1. vc++使用cookie登录网站

    以http://www.idc816.com为例 效果图: 1)先登录获取cookie,再使用cookie获取用户信息 2)记录cookie,关闭程序后重新运行程序,直接获取用户信息 使用Fiddle ...

  2. .NET C#使用微信公众号登录网站

    适用于:本文适用于有一定微信开发基础的用户 引言:花了300大洋申请了微信公众平台后,发现不能使用微信公众号登录网站(非微信打开)获得微信帐号.仔细研究后才发现还要再花300大洋申请微信开放平台才能接 ...

  3. Winform模拟post请求和get请求登录网站

    引言 最近有朋友问如何用winform模拟post请求,然后登录网站,稍微想了一下,大致就是对http报文的相关信息的封装,然后请求网站登录地址的样子.发现自己的博客中对这部分只是也没总结,就借着这股 ...

  4. Google谷歌搜索引擎登录网站 - Blog透视镜

    建置好了网站之后,为了能提升流量或是增加曝光度,Mix通常会到Google谷歌,用手动登录的方式,登录网站,不久之后,搜索引擎就会派遣蜘蛛机器人,来检索你的网站,等一段时间之后,就会出现在搜索引擎内, ...

  5. 配置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 ...

  6. 用libcurl 登录网站

    libcurl 可以发送和接收HTTP消息,因此可以发送用户名.密码和验证码来登录网站,网上有不少这方面的内容,但不甚完整,我摸索了两天,将其中要点记录下来. 基本步骤 正常访问登录页面,访问时,设置 ...

  7. 用c#开发微信 (20) 微信登录网站 - 扫描二维码登录

    像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 1 创建网站应用 在微信开放平台创建一个网站应用 https:// ...

  8. c#使用WebClient登录网站抓取登录后的网页

    C#登录网站实际上就是模拟浏览器提交表单,然后记录浏览器响应返回的会话Cookie值,再次发送请求时带着这个会话cookie值去请求就可以实现模拟登录的效果了. 如下类CookieAwareWebCl ...

  9. 已授予账号 "以服务方式登录"的权限

    已授予账号.\Cliff "以服务方式登录"的权限 --------------------------------------------------- 进入服务管理器(Serv ...

随机推荐

  1. FZU软工第十一次作业-软件产品案例分析

    目录 前言: 第一部分.调研,评测: 1.1.初次感觉: 1.2.企业号bug: 1.3.你觉得为什么这个产品组的人没有发现这些bug: 1.4.假设你们团队需要开发这套系统,需要注意哪些方面: 2. ...

  2. nginx的安装 、Nginx默认虚拟主机、nginx用户认证、nginx 域名重定向

    1.nginx:官网:www.nginx.org 下载:wget -c  http://nginx.org/download/nginx-1.14.0.tar.gz解压:tar -zxvf nginx ...

  3. CentOS安装LibreOffice

    查找yum源的安装包$ yum search libreoffice 查看yum源上安转包基本信息$ yum info libreoffice可安装的软件包名称 :libreoffice架构 :x86 ...

  4. 【HDOJ3018】【一笔画问题】【欧拉回路+并查集】

    http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Me ...

  5. Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法

    Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法: https://blog.csdn.net/mingjie1212/article/details/485250 ...

  6. ionic项目中 软键盘弹出之后的问题:

    Android SDK目前提供的软键盘弹出模式接口只有两种: 一是弹出时自动回冲界面,将所有元素上顶: 一种则是不重绘界面,直接将控件元素遮住:     1. ionic 中弹出键盘遮挡住输入框(覆盖 ...

  7. set集合的遍历(基于迭代器和增强for循环,没有一般的for循环)

    赋:开发项目中见到的代码 Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法 package com.sort; import java.util.HashSet; ...

  8. JQuery注册页面表单检验完善

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 使用 Prometheus 监控minio 性能指标信息&&docker-compose 方式运行

    minio server 已经支持Prometheus 了,对于系统的运行参数我们可以方便.实时的查看 运行使用docker-compose docker-compose 文件 version: &q ...

  10. git和gulp使用

    git push origin master/chunxiong git remote -v git merge chunxiong working tree:就是你所工作在的目录,每当你在代码中进行 ...