C++通过Wininet库提交POST信息登录到PHPChina中文开发者社区

与上一篇教程文章“c++通过TCP/IP协议提交POST信息登录到PHPChina中文开发者社区”不同的
是这次我们使用Wininet库来提交POST请求并得到HTTP响应消息而非服务器响应消息!

本步骤就不讲诉抓包和分析协议包的过程了,如果想知道的话可以去看一下我原先写的TCP提交POST请求里有详细的抓包过程 "c++通过TCP/IP协议提交POST信息登录到PHPChina中文开发者社区"

下面是抓到的POST提交详细信息:

POST /member.php?mod=logging&action=login&loginsubmit=yes&loginhash=Lq0cN&inajax=1 HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://www.phpchina.com/member.php?mod=logging&action=login
Accept-Language: zh-CN
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Host: www.phpchina.com
Content-Length: 141
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: CNZZDATA1260206835=395559444-1503368013-%7C1503727136; CNZZDATA1253686164=28344171-1503363672-%7C1503726440; pgv_pvi=2444701901; UM_distinctid=15e0515a0bef1-0b6f2a02ea70a1-38732142-140000-15e0515a0bf10f; Hm_lvt_8c71400238561a42650208f8e318a121=1503324916,1503327293,1503684977,1503685263; NXZu_3812_sid=QP6ZvN; NXZu_3812_saltkey=utUStUHT; NXZu_3812_lastvisit=1503371200; NXZu_3812_lastact=1503729574%09member.php%09logging; NXZu_3812_ulastactivity=574eU5381ctVgy4atPkwJwQh6kBDyVKy%2BtdKJa8hqFkB2HO34i0e; NXZu_3812_lastcheckfeed=1065280%7C1503381375; NXZu_3812_connect_is_bind=0; NXZu_3812_sendmail=1; pgv_info=ssi=s2734813660; Hm_lpvt_8c71400238561a42650208f8e318a121=1503685267

URL:http://www.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=Lq0cN&inajax=1

URL:

http://www.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=Lq0cN&inajax=1

POST数据:formhash=7a908ad2&referer=http%3A%2F%2Fwww.phpchina.com%2F.%2F&username=123321&password=c8837b23ff8aaa8a2dde915473ce0991&questionid=0&answer=

端口:

80

C++代码如下

 

#include <iostream>  
#include <cstdio>  
#include <wininet.h>  
#define X "\r\n"  
#define URL "http://www.phpchina.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LRsS7&inajax=1"  //请求地址  
#define _COM "www.phpchina.com" //网站地址  
#define _COM_URL "/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"      //请求页面  
#define PORT 0x50   //端口号80  
#define _POST "formhash=7a908ad2&referer=http%3A%2F%2Fwww.phpchina.com%2F&username=17%E5%B2%81boy&password=9d72df73e107457207b7a594b62929d2&questionid=0&answer=" //POST请求数据  
using namespace std;  
  
int main()  
{  
    char _HTTP_ARAC[] = "Accept: */*\r\n"\                                          //原始协议头  
                        "Referer: "\  
                        URL\  
                        X\  
                        "Accept-Language: zh-cn\r\n"\  
                        "Content-Type: application/x-www-form-urlencoded\r\n\r\n";  
    char _HTTP_POST[] = _POST;  
    char _HTTP_File[1024] ={0};  
    cout << "提交HTTP协议头:" << _HTTP_ARAC << endl;  
    cout << "提交POST数据:" << _POST << endl;  
    HINTERNET Inte = InternetOpenA ("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)", 1, "" ,"" ,0);    //初始化Wininet并创建一个HTTP连接  
    if(0 == Inte){  
        InternetCloseHandle(Inte);  
        cout << "error InternetOpen" << endl;  
    }  
    HINTERNET Connect = InternetConnectA (Inte, _COM,PORT, "","" , 3, 0, 0);    //请求与网站连接  
      if(0 == Connect){  
        InternetCloseHandle(Inte);  
        InternetCloseHandle(Connect);  
        cout << "error InternetConnect" << endl;  
    }  
    HINTERNET HttpOpen = HttpOpenRequestA (Connect, "POST", _COM_URL, "HTTP/1.1", NULL,NULL,1, 0);  //向网站服务器发送请求页面  
      if(0 == HttpOpen){  
        InternetCloseHandle(Inte);  
        InternetCloseHandle(Connect);  
        InternetCloseHandle(HttpOpen);  
        cout << "error HttpOpenRequest" << endl;  
    }  
  
    bool bo = HttpSendRequestA(HttpOpen, _HTTP_ARAC, strlen(_HTTP_ARAC), _HTTP_POST, strlen (_HTTP_POST));  //向网站服务器发送请求HTTP协议和POST请求数据  
    if(bo == false){  
        InternetCloseHandle(Inte);  
        InternetCloseHandle(Connect);  
        InternetCloseHandle(HttpOpen);  
        cout << "error HttpSendRequest" << endl;  
    }  
    DWORD y = 0;  
     if(!InternetReadFile (HttpOpen, _HTTP_File, 1024, &y)){    //获取HTTP响应消息  
        InternetCloseHandle(Inte);  
        InternetCloseHandle(Connect);  
        InternetCloseHandle(HttpOpen);  
        cout << "error InternetReadFile" << endl;  
    }else{  
        printf("%s",_HTTP_File);    //打印得到的响应消息  
    }  
    getchar();  
    return 0;  
}  

 

运行效果:

 

 

 

可以看到返回的汉字信息是乱码英文却不是乱码,从返回的HTTP协议头中看到返回的编码格式是“utf-8" 我们计算机处理汉字时使用的编码时GB2312编码格式所以我们要将服务器返回的HTTP响应信息转换成GB2312编码格式,转换库推荐使用iconv库!

下面是转换后的信息:

<?xml version="1.0" encoding="utf-8"?>
<root><![CDATA[登录失败,您还可以尝4次 script type="text/javascript" reload="1">if(typeof errorhandle_=='function') {errorhandle_('登录失败,您还可以尝4次 , {'loginperm':'1'});}</script>]]></root>?p

 

密码是随便输入的,所以提示的错误信息,如果不会Wininet库没关系后面我将写一篇文章来详细讲解Wininet库接口函数的详细说明资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值