#include "stdafx.h"
#include <Windows.h>
#include <wininet.h>
#include <iostream>
#include <fstream>
#include <time.h>
//#include <MAPIUTIL.H >

using namespace std;
#pragma comment(lib, "wininet.lib")

#ifdef _UNICODE
#define tstring wstring
#else
#define tstring string
#endif

//简单日志
void WriteLog(const char *p_filename, const char *p_str)
{
tm *local_time;
time_t t_tm = time(NULL);
local_time = localtime(&t_tm);
char chtm[20] = {0};
strftime(chtm, 20, "%H:%M:%S", local_time);
cout<<chtm<<"\t"<<p_str<<endl;
ofstream out_file(p_filename, ios::out|ios::app);
out_file<<chtm<<"\t"<<p_str<<endl;
out_file.close();
}

/* 生成GUID码 */
const char* newGUID()
{
//srand(time(NULL));
static char buf[64] = {0};
_snprintf(buf, sizeof(buf) ,
"%08X-%04X-%04X-%04X-%04X%04X%04X" ,
rand()&0xffffffff,
rand()&0xffff,
rand()&0xffff,
rand()&0xffff,
rand()&0xffff, rand()&0xffff, rand()&0xffff
);
return (const char*)buf;
}

/************************************************************************/
/* HttpPost_Data - HTTP投递数据
参数:pszURL - 投递目标地址
pszData - 投递内容
pCookie - 连接Cookie
dwCookie - Cookie长度
返回值;BOOL
*/
/************************************************************************/
BOOL HttpPost_Data(__in const TCHAR *pszURL, __in const TCHAR *pszData, __inout TCHAR *pCookie, __inout DWORD& dwCookie)
{
BOOL bRet = FALSE;
DWORD dwErr = 0;
HINTERNET hInt,hConn,hReq;

//解析地址
URL_COMPONENTS crackedURL;
TCHAR szHostName[128] = {0};
TCHAR szUrlPath[256] = {0};

ZeroMemory(&crackedURL, sizeof (URL_COMPONENTS));
crackedURL.dwStructSize = sizeof (URL_COMPONENTS);
crackedURL.lpszHostName = szHostName;
crackedURL.dwHostNameLength = sizeof(szHostName);
crackedURL.lpszUrlPath = szUrlPath;
crackedURL.dwUrlPathLength = sizeof(szUrlPath);

InternetCrackUrl(pszURL, _tcslen(pszURL),0,&crackedURL);

//启用HTTP协议
hInt = InternetOpen(_T("Microsoft Internet Explorer"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
//建立HTTP连接
hConn = InternetConnect(hInt,crackedURL.lpszHostName, crackedURL.nPort,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
//创建一个URL请求
hReq = ::HttpOpenRequest(hConn, _T("POST"), crackedURL.lpszUrlPath, NULL, NULL, NULL, INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD, 0);
dwErr = ::GetLastError();//返回0

//添加请求头部数据
const TCHAR *psz_Content_Type = _T("Content-Type: application/json");
DWORD dwLen_psz_Content_Type = _tcslen(psz_Content_Type);
HttpAddRequestHeaders(hReq, psz_Content_Type, dwLen_psz_Content_Type, HTTP_ADDREQ_FLAG_ADD);

//添加Cookie
tstring str = _T("Cookie: ");
tstring strCookie = pCookie;
str += strCookie;
HttpAddRequestHeaders(hReq, str.c_str(), str.length(), HTTP_ADDREQ_FLAG_ADD);

//发送请求
DWORD dwLen = _tcslen(pszData);
bRet = ::HttpSendRequest(hReq, NULL, 0, (LPVOID)pszData, dwLen);
if (!bRet)
{
dwErr = ::GetLastError();
//写日志...
return FALSE;
}

//查询状态码
TCHAR szCode[6] = {0};
DWORD dwCode = 6;
bRet = ::HttpQueryInfo(hReq, HTTP_QUERY_STATUS_CODE , (LPVOID)szCode, &dwCode, NULL);
if (!bRet)
{
dwErr = ::GetLastError();
//写日志...szCode
return FALSE;
}

//获取Cookie数据
bRet = ::HttpQueryInfo(hReq, HTTP_QUERY_SET_COOKIE , pCookie, &dwCookie, NULL);
if (!bRet)
{
dwErr = ::GetLastError();
//写日志...szCode
}

//读取接收内容
TCHAR chRead[1024] = {0};
DWORD dwRead = 1024;
DWORD dwOutSize = 0;

tstring strRead = _T("");
while(1)
{
bRet = InternetReadFile(hReq, (LPVOID)chRead, dwRead, &dwOutSize);
if (bRet)
{
//保存解析接收到的内容
str += chRead;
}
else
{
dwErr = ::GetLastError();
break;
}
ZeroMemory(chRead, 1024);
}
bRet = TRUE;
return bRet;
}

int _tmain(int argc, _TCHAR* argv[])
{
/*srand(time(NULL));
for (int i = 0; i < 100; i++)
{
printf("%s\n", newGUID());
}*/

TCHAR ch[1024] ={0};
DWORD dw = 1024;
const TCHAR *pcsUrlLogin = _T("http://www.baidu.com");
const TCHAR *pszch = _T("ABCD");
DWORD dwLen = _tcslen(pszch);
HttpPost_Data(pcsUrlLogin, pszch, ch, dw);
system("pause");
return 0;
}

Wininet-Post的更多相关文章

  1. C# 文件下载 : WinINet

    在 C# 中,除了 WebClient 我们还可以使用一组 WindowsAPI 来完成下载任务.这就是 Windows Internet,简称 WinINet.本文通过一个 demo 来介绍 Win ...

  2. wininet异步InternetReadFile和超时相关问题

    wininet是对socket的封装 主要流程为创建,连接,发送,接收,关闭几个过程 所以在回调函数InternetStatusCallback中可以检测到dwInternetStatus #defi ...

  3. Winform文件下载之WinINet

    在C#中,除了webclient我们还可以使用一组WindowsAPI来完成下载任务.这就是Windows Internet,简称 WinINet.本文通过一个demo来介绍WinINet的基本用法和 ...

  4. 使用WinINet和WinHTTP实现Http访问

    使用WinINet和WinHTTP实现Http访问 Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,在这个例程中我使用POST方式,提交数据value ...

  5. 如何使用 WinInet 时提供下载上载进度信息

    概要许多开发人员都使用 WinInet 函数来下载或上载文件在 Internet 上的想要提供一个进度条以指示多少文件传输已完成,但多少就越长.您可以使用以下机制来完成此.Collapse image ...

  6. 转 BHO API HOOK Wininet基于IE编程的一些资料

      BHO原理:推荐vc base中的文章: 如何使用BHO定制你的Internet Explorer浏览器 API HOOK的基本原理:推荐C++ builder 研究中的文章: API Hook基 ...

  7. WinInet:HTTPS 请求出现无效的证书颁发机构的处理

    首先,微软提供的WinInet库封装了对网页访问的方法. 最近工作需要从https服务器获取数据,都知道https和http网页的访问方式不同,多了一道证书认证程序,这样就使得https在请求起来比h ...

  8. Wininet笔记一

    1, InternetOpen 创建根句柄,由下一层的 InternetOpenUrl 和 InternetConnect 使用,而 InternetConnect 创建的句柄又被之后的几个函数使用. ...

  9. 使用WinINet和WinHTTP实现Http訪问

    使用WinINet和WinHTTP实现Http訪问 飘飘白云 l_zhaohui@163.com 2007-11-30 Http訪问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用 ...

  10. wininet API调用,检测网络

    [DllImport("wininet")]        private extern static bool InternetGetConnectedState(out int ...

随机推荐

  1. Vue三步完成跨域请求

    三步完成跨域请求 ①main.js中: Vue.prototype.HOME = '/api'; ② config/index.js中: module.exports = { dev: { // Pa ...

  2. 04-03 scikit-learn库之AdaBoost算法

    目录 scikit-learn库之AdaBoost算法 一.AdaBoostClassifier 1.1 使用场景 1.2 参数 1.3 属性 1.4 方法 二.AdaBoostRegressor 更 ...

  3. Python中的option Parser

    一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse, ...

  4. 在chrome浏览器安装各种前端,后台插件

    如果想要在chrome安装插件,首先得先有应用chrome的商城,但是默认情况下是没有应用商店: 默认情况下下面这个界面是空白的,没有任何东西,第一步就先安装[谷歌访问助手] 安装步骤 第一步: 下载 ...

  5. 使用foreach语句对数组成员进行遍历

    /*** 使用foreach语句对数组成员进行遍历* **/ public class ForeachDemo { public static void main(String[] args) { i ...

  6. MAC 上的Phantomjs的安装和配置

    1.下载 http://phantomjs.org/download.html 选择mac版本下载 2.下载完成后,解压缩,然后放到自己的一个目录下面 例如:/usr/local/Phantomjs/ ...

  7. 调用对象 “ha-datastoresystem”的“HostDatastoreSystem.QueryVmfsDatastoreCreateOptions” 失败。

    VMware vSphere Client上显示:在 ESXi“10.10.10.3”上调用对象 “ha-datastoresystem”的“HostDatastoreSystem.QueryVmfs ...

  8. ASP.NET Core API ——Dapper的使用

    ASP.NET Core API ——Dapper的使用 简介:Dapper是一个ORM框架,负责数据库和程序语言之间的映射. 使用步骤: l  创建一个IDBConnection的接口对象 l  编 ...

  9. CTFd平台部署

    学校要办ctf了,自己一个人给学校搭建踩了好多坑啊..这里记录一下吧 心累心累 这里只记录尝试成功的过程 有些尝试失败的就没贴上来 为各位搭建的时候节省一部分时间吧. ubuntu18搭建 0x01 ...

  10. [NOIp2009] luogu P1073 最优贸易

    md 我发现跟你们聊天贼没意思. 题目描述 我觉得描述挺好,不改了吧. Solution 容易发现这是道 dfs + DP 的乱搞题. 设 f[x]f[x]f[x] 表示到 xxx 这个点的最优答案. ...