mfc-关于HttpSendRequestA函数发送请求成功后,保存网页返回内容的问题

问题描述

关于HttpSendRequestA函数发送请求成功后,保存网页返回内容的问题

下边的代码是点击按钮事件的,HttpSendRequest明显已经执行成功,得到的recv.html中依然是登陆页面,不是我想要的登陆后跳过去的页面

 #include <afxinet.h>
#include <WinInet.h>
#include <cstring>
#pragma comment(lib,"wininet.lib")

void CLOGINDlg::OnOK()
{

    // TODO: Add extra validation here
    //CDialog::OnOK();
    HINTERNET hSession = NULL;
    HINTERNET hConnect = NULL;
    HINTERNET hRequest = NULL;

    //InternerOpen
    LPCSTR lpszAgent = "Application";
    DWORD dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG;
    /*
        HINTERNET InternetOpen(
            _In_ LPCTSTR lpszAgent, //指定调用Wininet函数的应用程序或入口,该入口作HTTP协议中用户代理项
            _In_ DWORD dwAccessType,    //访问要求类型
            _In_ LPCTSTR lpszProxyName, //代理服务器的名字
            _In_ LPCTSTR lpszProxyBypass,//指向一个字符串,指定一个可选的主机名列表或IP地址
            _In_ DWORD dwFlags
        );

    */
    hSession = InternetOpenA(lpszAgent, dwAccessType, NULL, NULL, 0);
    if (!hSession)
    {
        printf("网络打开失败!");
        return ;
    }

    //InternetConnectA
    LPCSTR lpszServerName = "202.200.144.63";
    INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT;
    DWORD dwService = INTERNET_SERVICE_HTTP;

    hConnect = InternetConnectA(hSession, lpszServerName, nServerPort, NULL, NULL, dwService, 0, 1);
    if (!hConnect)
    {
        printf("网络连接失败!");
        return ;
    }

    //HttpOpenRequestA
    LPCSTR lpszVerb = "GET";
    LPCSTR lpszObjectName = "xs_main.aspx?xh=120620223";//网站的对象名,网址在IntetnetConnectA第二个参数指定
    LPCSTR lpszVersion = "HTTP/1.1";
    LPCSTR lpszReferer = "Referer:http://202.200.144.63/xs_main.aspx?xh=120620223 ";
    LPCSTR lpszAcceptTypes = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
    DWORD dwFlags = INTERNET_FLAG_RELOAD;

    hRequest = HttpOpenRequestA(hConnect, lpszVerb, lpszObjectName, lpszVersion, lpszReferer, &lpszAcceptTypes, dwFlags, 1);
    if (!hRequest)
    {
        printf("打开请求失败!");
        return ;
    }

    //HttpSendRequestA
    LPCSTR  lpszHeaders = "Content-Type: application/x-www-form-urlencoded;Cookie: safedog-flow-item=F727C5A572FD29201828136C14E22568; ASP.NET_SessionId=uxizon55w1ua4djitykxu3vlrn";
    DWORD   dwHeadersLength = -1L;
    char    szFormData[1024] = { 0 };
    strcpy(szFormData, "__VIEWSTATE=dDwyODE2NTM0OTg7Oz4h2wC4w12c8RCRF3jDvJBjVLPUHQ%3D%3D&txtUserName=120620223&TextBox2=******&txtSecretCode="+m_YZM+"&RadioButtonList1=%D1%A7%C9%FA&Button1=&lbLanguage=&hidPdrs=&hidsc=rn");//保存用户名,密码,用户类别及验证码

    LPVOID pBuf = (LPVOID)szFormData;
    BOOL bReturn = HttpSendRequestA(hRequest, lpszHeaders, dwHeadersLength, NULL, 0);
    if (!bReturn)
    {
        printf("返回请求失败!");
        return ;
    }else
        AfxMessageBox("登陆成功!");

    char    szRecvBuf[1024 + 1];          // 接受数据缓冲区
    DWORD   dwNumberOfBytesRead;        // 服务器返回大小
    DWORD   dwRecvTotalSize = 0;          // 接受数据总大小
    DWORD   dwRecvBuffSize = 0;           // 接受数据buf的大小
    memset(szRecvBuf, 0, 1024 + 1);

    LPCSTR  lpFileName = "recv.html";
    DWORD   dwNumberOfBytesWritten;

    HANDLE hOpenFile = (HANDLE)CreateFileA(lpFileName, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, NULL, NULL);

    if (hOpenFile == INVALID_HANDLE_VALUE)
    {
        printf("打开文件失败!");
        hOpenFile = NULL;
        return ;
    }

    do
    {
        bReturn = InternetReadFile(hRequest, szRecvBuf, 1024, &dwNumberOfBytesRead);
        if (!bReturn)
        {
            printf("读取文件失败!");
            break;
        }

        // 统计接受数据的大小
        szRecvBuf[dwNumberOfBytesRead] = '';
        dwRecvTotalSize += dwNumberOfBytesRead;
        dwRecvBuffSize += strlen(szRecvBuf);

        WriteFile(hOpenFile, szRecvBuf, dwNumberOfBytesRead, &dwNumberOfBytesWritten, NULL);

    } while (dwNumberOfBytesRead != 0);

    CloseHandle(hOpenFile);

    InternetCloseHandle(hSession);
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hRequest);

}

解决方案

加不加验证码的结果一模一样,验证码好像没起多大作用。我是只加把显示验证码那个链接用CHtmlView的 Navigate方法显示在我自己的登陆界面了,但是输入不输入结果都一样,都是“登陆成功”,但是我得到的recv.html文件依旧是网页里登陆的那个界面,没发生变化

解决方案二:

你用api方式提交的数据跟浏览器有区别,你可以抓包对比一下数据,看哪里得数据参数没有填对。

时间: 2024-10-04 12:08:06

mfc-关于HttpSendRequestA函数发送请求成功后,保存网页返回内容的问题的相关文章

ajax请求成功后的返回数据

问题描述 ajax请求成功后的返回数据 我用ajax发送请求做注册,若请求成功且注册成功,用了alert("注册成功"), 若验证码或其他问题,导致访问成功但是未注册成功,会有其他的信息弹出. 在不同情况下,其他信息都会根据各种情况正确的弹出,但是当注册成功时(查了后台数据,能够查到新注册的信息),"注册成功"字样不弹出来. 解决方案 你在success回调里面return内容无用,没有任何对象接收返回值,而且ajax是异步的,如果你userLive要返回数据,也需

ajax请求成功后新开窗口window.open()被拦截解决方法_AJAX相关

问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所

Ajax请求成功后打开新窗口地址_AJAX相关

废话不多说,关键代码如下所示: jQuery.ajax({ "type":"post", "url":"http://www.baidu.com", "success":function(rel){ if(rel.isSuccess){ window.open(rel.url,"_blank"); } } }); 这个url请求成功后window.open(rel.url,"_

Ajax请求成功后打开新窗口地址

废话不多说,关键代码如下所示: jQuery.ajax({ "type":"post", "url":"http://www.baidu.com", "success":function(rel){ if(rel.isSuccess){ window.open(rel.url,"_blank"); } } }); 这个url请求成功后window.open(rel.url,"_

ajax请求成功后新开窗口window.open()被拦截解决方法

问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所

json-用plupload上传图片,和struts2结合,怎么获取上传成功后action返回的数据

问题描述 用plupload上传图片,和struts2结合,怎么获取上传成功后action返回的数据 也就是在plupload中怎么获取后台传过来的数据,是json数据,再简单点说,怎么写 plupload中的回调函数 解决方案 //使用AJAX上传文件,支持多文件上传,已与Plupload2.1.2插件测试通过 @RequestMapping("/ajaxLoadFile") @ResponseBody public Object ajaxLoadFile(HttpServletRe

android进行二维码的扫描后,扫描成功后如何返回到指定的活动

问题描述 android进行二维码的扫描后,扫描成功后如何返回到指定的活动 现在是扫描成功返回到点击扫描按钮的那个活动,我想让他返回到我指定的活动,我使用的是ZXing库扫描二维码,另外我想知道,二维码中是图片,我如何将扫描的图片在android布局文件中显示出来,我试过,如果是图片扫描的是一串url,希望各位前辈大神教教我这个大三学生,不甚感激 解决方案 用的是zxing的话在CaptureActivity里面可以这么写,就是普通的两个高activity跳转而已 public void han

form表单上传图片-提交给php方法,成功后想返回前台一些值,但前台始终无法获取到参数值。急!!!

问题描述 form表单上传图片-提交给php方法,成功后想返回前台一些值,但前台始终无法获取到参数值.急!!! form表单部分代码:以此来实现form提交页面不跳转. <form action="user.php" method="post" ENCTYPE="multipart/form-data" target="id_iframe"> <input name="upfile" ty

spring请求成功后modelview跳转问题

问题描述 前台使用的是iframe框架在加载iframe里面的某个子页面的时候通过$(document).ready向后台发送请求,请求成功不设置跳转页面iframe子页面什么都没有,setViewName("tddj.jsp");请求成功但是页面一直刷新,不断的ready这种情况有没有好的解决方法啊!注:初始化jsp的时候需要查询数据! 解决方案 解决方案二:该回复于2014-08-11 12:32:59被版主删除解决方案三:ajax请求数据,然后以json的数据格式返回