Wininet-Post
#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的更多相关文章
- C# 文件下载 : WinINet
在 C# 中,除了 WebClient 我们还可以使用一组 WindowsAPI 来完成下载任务.这就是 Windows Internet,简称 WinINet.本文通过一个 demo 来介绍 Win ...
- wininet异步InternetReadFile和超时相关问题
wininet是对socket的封装 主要流程为创建,连接,发送,接收,关闭几个过程 所以在回调函数InternetStatusCallback中可以检测到dwInternetStatus #defi ...
- Winform文件下载之WinINet
在C#中,除了webclient我们还可以使用一组WindowsAPI来完成下载任务.这就是Windows Internet,简称 WinINet.本文通过一个demo来介绍WinINet的基本用法和 ...
- 使用WinINet和WinHTTP实现Http访问
使用WinINet和WinHTTP实现Http访问 Http访问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用向服务器提交数据,在这个例程中我使用POST方式,提交数据value ...
- 如何使用 WinInet 时提供下载上载进度信息
概要许多开发人员都使用 WinInet 函数来下载或上载文件在 Internet 上的想要提供一个进度条以指示多少文件传输已完成,但多少就越长.您可以使用以下机制来完成此.Collapse image ...
- 转 BHO API HOOK Wininet基于IE编程的一些资料
BHO原理:推荐vc base中的文章: 如何使用BHO定制你的Internet Explorer浏览器 API HOOK的基本原理:推荐C++ builder 研究中的文章: API Hook基 ...
- WinInet:HTTPS 请求出现无效的证书颁发机构的处理
首先,微软提供的WinInet库封装了对网页访问的方法. 最近工作需要从https服务器获取数据,都知道https和http网页的访问方式不同,多了一道证书认证程序,这样就使得https在请求起来比h ...
- Wininet笔记一
1, InternetOpen 创建根句柄,由下一层的 InternetOpenUrl 和 InternetConnect 使用,而 InternetConnect 创建的句柄又被之后的几个函数使用. ...
- 使用WinINet和WinHTTP实现Http訪问
使用WinINet和WinHTTP实现Http訪问 飘飘白云 l_zhaohui@163.com 2007-11-30 Http訪问有两种方式,GET和POST,就编程来说GET方式相对简单点,它不用 ...
- wininet API调用,检测网络
[DllImport("wininet")] private extern static bool InternetGetConnectedState(out int ...
随机推荐
- .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架
框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...
- [scrapy-redis] 将scrapy爬虫改造成分布式爬虫 (2)
1. 修改redis设置 redis默认处在protection mode, 修改/etc/redis.conf, protected-mode no, 或者给redis设置密码, 将bind 127 ...
- [Java web] JSP 内置对象
1. Application 服务器启动后产生,所有用户共用一个Application,可以往里面存一些键值对 2. Session 会话对象,第一个JSP页面被装载时自动创建.从一个客户打开浏览器并 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件
概述 在 <Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler> 中我们已经了解了 MessageHandler 的运行原理和使用方法 ...
- 分库分表(7)--- SpringBoot+ShardingSphere实现分库分表 + 读写分离
分库分表(7)--- ShardingSphere实现分库分表+读写分离 有关分库分表前面写了六篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理 ...
- Flutter 修改SDK 路径出现的问题
更换Flutter SDK 路径之后出现的问题. 解决方法:flutter packages upgrade. 替换: 替换这两个文件里的路径. 同时修改电脑配置文件里的路径: open -a Tex ...
- Numpy数组操作
""" Numpy 数组操作 修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做 ...
- vue图片点击放大预览
第一种:viewerjs使用介绍(PC.移动端都兼容) 1.先安装依赖 npm install v-viewer --save 2.main.js内引用并注册调用 //main.js import V ...
- appium-doctor报错“JAVA_HOME is set but does not exist on the file system at "D:\work\eclipse\Java\jdk1.7.0_67;"”解决办法
卸载了jdk重新安装,重新配置环境就可以了
- JVM垃圾回收(下)
接着上一篇,介绍完了 JVM 中识别需要回收的垃圾对象之后,这一篇我们来说说 JVM 是如何进行垃圾回收. 首先要在这里介绍一下80/20 法则: 约仅有20%的变因操纵着80%的局面.也就是说:所有 ...