#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. zend studio 13.6 导入项目及其他设置

    1. 先创建一个新的项目:file -> new -> project 2. 创建新项目之后,在左侧的项目目录上右键 -> import 到此导入项目, 完成! 设置编码utf-8 ...

  2. 前后端分离————VUE+node(express)

    前后端分离----VUE+node(express) vue作为前端的框架,node(express)作为后端的框架.无数据库,使用端口保存数据. VUE: 使用vue-cli构建vue项目(vuea ...

  3. Spring Security 自定义登录认证(二)

    一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...

  4. Spring Boot (十三): Spring Boot 整合 RabbitMQ

    1. 前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷.消息分发的作用. 消息队列在比较主要的一个作用是用 ...

  5. 浅谈分布式事务与TX-LCN

    最近做项目使用到了分布式事务,下面这篇文章将给大家介绍一下对分布式事务的一些见解,并讲解分布式事务处理框架TX-LCN的执行原理,初学入门,错误之处望各位不吝指正. 什么情况下需要使用分布式事务? 使 ...

  6. 你也可以写个服务器 - C# Socket学习2

    前言 这里说的服务器是Web服务器,是类似IIS.Tomcat之类的,用来响应浏览器请求的服务. Socket模拟浏览器的Url Get请求 首先浏览器的请求是HTTP协议.我们上一篇说过,HTTP是 ...

  7. Unreal Engine 4 系列教程 Part 5:制作简单游戏

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  8. RF用例执行方法

    用例如下图: 1.执行整个项目下的所有用例 dos命令下输入robot D:\work_doc\RF (RF为下图中脚本项目Test目录的上级目录) 2.执行某个suite中的所有用例 dos命令下输 ...

  9. std::to_string

    头文件 #include <string> std::string to_string( int value ); std::string to_string( long value ); ...

  10. 2019.10.24 CSP%你赛第二场d1t3

    题目描述 Description 精灵心目中亘古永恒的能量核心崩溃的那一刻,Bzeroth 大陆的每个精灵都明白,他们的家园已经到了最后的时刻.就在这危难关头,诸神天降神谕,传下最终兵器——潘少拉魔盒 ...