#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. 教老婆学Linux运维(二)Linux常用命令指南【上】

    目录 教老婆学Linux(二)Linux常用命令指南[上] 一.概述 二.常用命令 教老婆学Linux(二)Linux常用命令指南[上] 作者:姚毛毛的博客 tips:文章太长,分两篇发出,本篇发前三 ...

  2. kubeadm部署高可用集群Kubernetes 1.14.1版本

    Kubernetes高可用集群部署 部署架构: Master 组件: kube-apiserver Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,所有对象 ...

  3. FastEarth

    1        概述 FastEarth(后文简称FE)是自主研发的跨平台三维地理信息可视化协作平台,内置完全自主研发的XDR渲染引擎,无缝对接主流地理信息平台数据.建筑BIM.工厂PIM以及多种三 ...

  4. 究竟是.NET淹没在汪洋大海,还是人心的浮躁、见识的短浅?

    这些年来有相当多的.net开发者转了其他语言,也有一部分是迫不得已因为公司的转型而转,其中也有一大部分觉得.net没前途性能不好比某些语言性能差.还有一部分会说出一些名词去指责.net说他做不到,其实 ...

  5. golang的生产者消费者模型示例

    package main import "fmt" func Producer(ch chan int) { for i := 1; i <= 10; i++ { ch &l ...

  6. docker服务在Mac上的启动与使用

    在mac上打开安装的docker软件就可以启动docker服务了 点击顶部状态栏中鲸鱼图标会弹出操作菜单,显示着服务的状态,如下图所示: 只有在docker服务启动了之后,才可以在终端使用docker ...

  7. C# ManualResetEvent用法

    ManualResetEvent表示线程同步事件,可以对所有进行等待的线程进行统一管理(收到信号时必须手动重置该事件) 其构造函数为: public ManualResetEvent (bool in ...

  8. A-06 最小角回归法

    目录 最小角回归法 一.举例 二.最小角回归法优缺点 2.1 优点 2.2 缺点 三.小结 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等 ...

  9. 【NOIP2009】道路游戏

    Description 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 nn 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n ...

  10. Java自动化测试框架-03 - TestNG之Test Group篇 - 我们一起组团打怪升级(详细教程)

    简介 其实这篇文章的group宏哥在上一篇中就提到过,但是就是举例一笔带过的,因此今天专门有一篇文章来讲解Group的相关知识.希望大家茅塞顿开 ,有着更进一步认识和了解测试组. 一.Test Gro ...