#include "HttpHelper.h"
#include <fstream>
#pragma comment(lib, "Wininet.lib")
#include <tchar.h>
HttpHelper::HttpHelper(void) :m_hSession(NULL), m_hConnect(NULL), m_hRequest(NULL)
{
}
HttpHelper::~HttpHelper(void)
{
Release();
}
// 通过HTTP请求:Get或Post方式获取JSON信息
const std::string HttpHelper::RequestData(const std::string& lpUrl,
HttpRequest type,
std::string strHeader,
std::string strPostData)
{
std::string strRet = "";
try
{
if (lpUrl.empty())
{
throw Hir_ParamErr;
}
Release();
m_hSession = InternetOpen(_T("Http-connect"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL); //局部
if (NULL == m_hSession)
{
throw Hir_InitErr;
}
INTERNET_PORT port = INTERNET_DEFAULT_HTTP_PORT;
std::string strHostName = "";
std::string strPageName = "";
ParseURLWeb(lpUrl, strHostName, strPageName, port);
printf("lpUrl:%s,\nstrHostName:%s,\nstrPageName:%s,\nport:%d\n", lpUrl.c_str(), strHostName.c_str(), strPageName.c_str(), (int)port);
m_hConnect = InternetConnectA(m_hSession, strHostName.c_str(), port, NULL, NULL, INTERNET_SERVICE_HTTP, NULL, NULL);
if (NULL == m_hConnect)
{
throw Hir_ConnectErr;
}
std::string strRequestType;
if (Hr_Get == type)
{
strRequestType = "GET";
}
else
{
strRequestType = "POST";
}
m_hRequest = HttpOpenRequestA(m_hConnect, strRequestType.c_str(), strPageName.c_str(), "HTTP/1.1", NULL, NULL, INTERNET_FLAG_RELOAD, NULL);
if (NULL == m_hRequest)
{
throw Hir_InitErr;
}
DWORD dwHeaderSize = (strHeader.empty()) ? 0 : strlen(strHeader.c_str());
BOOL bRet = FALSE;
if (Hr_Get == type)
{
bRet = HttpSendRequestA(m_hRequest, strHeader.c_str(), dwHeaderSize, NULL, 0);
}
else
{
DWORD dwSize = (strPostData.empty()) ? 0 : strlen(strPostData.c_str());
bRet = HttpSendRequestA(m_hRequest, strHeader.c_str(), dwHeaderSize, (LPVOID)strPostData.c_str(), dwSize);
}
if (!bRet)
{
throw Hir_SendErr;
}
char szBuffer[READ_BUFFER_SIZE + 1] = { 0 };
DWORD dwReadSize = READ_BUFFER_SIZE;
if (!HttpQueryInfoA(m_hRequest, HTTP_QUERY_RAW_HEADERS, szBuffer, &dwReadSize, NULL))
{
throw Hir_QueryErr;
}
if (NULL != strstr(szBuffer, "404"))
{
throw Hir_404;
}
while (true)
{
bRet = InternetReadFile(m_hRequest, szBuffer, READ_BUFFER_SIZE, &dwReadSize);
if (!bRet || (0 == dwReadSize))
{
break;
}
szBuffer[dwReadSize] = '\0';
strRet.append(szBuffer);
}
}
catch (HttpInterfaceError error)
{
m_error = error;
}
return std::move(strRet);
}
// 解析URL地址 [3/14/2017/shike]
void HttpHelper::ParseURLWeb(std::string strUrl, std::string& strHostName, std::string& strPageName, WORD& sPort)
{
sPort = 80;
string strTemp(strUrl);
std::size_t nPos = strTemp.find("http://");
if (nPos != std::string::npos)
{
strTemp = strTemp.substr(nPos + 7, strTemp.size() - nPos - 7);
}
nPos = strTemp.find('/');
if (nPos == std::string::npos) //没有找到
{
strHostName = strTemp;
}
else
{
strHostName = strTemp.substr(0, nPos);
}
std::size_t nPos1 = strHostName.find(':');
if (nPos1 != std::string::npos)
{
std::string strPort = strTemp.substr(nPos1 + 1, strHostName.size() - nPos1 - 1);
strHostName = strHostName.substr(0, nPos1);
sPort = (WORD)atoi(strPort.c_str());
}
if (nPos == std::string::npos)
{
return;
}
strPageName = strTemp.substr(nPos, strTemp.size() - nPos);
}
// 关闭句柄
void HttpHelper::Release()
{
ReleaseHandle(m_hRequest);
ReleaseHandle(m_hConnect);
ReleaseHandle(m_hSession);
}
// 释放句柄
void HttpHelper::ReleaseHandle(HINTERNET& hInternet)
{
if (hInternet)
{
InternetCloseHandle(hInternet);
hInternet = NULL;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
微信3.1.0.41逆向-微信3.1.0.41HOOK接口-vc++实例源码
共60个文件
h:44个
cpp:5个
ico:2个
1星 需积分: 35 89 下载量 175 浏览量
2021-01-03
19:43:24
上传
评论 4
收藏 496KB RAR 举报
温馨提示
微信3.1.0.41逆向-微信3.1.0.41HOOK接口(WeChatHelper3.1.0.41.dll)-vc++调用实例方法
资源详情
资源评论
资源推荐
收起资源包目录
vc++实例.rar (60个子文件)
CWechatHelper
Release
CWechatHelper.sln 1KB
CWechatHelper
CWechatHelper.ico 45KB
CWechatHelper.rc 8KB
common.cpp 2KB
common.h 496B
HttpHelper.h 2KB
CWechatHelper.aps 96KB
RecordObject.h 1003B
CWechatHelper.vcxproj 9KB
JsonHelper.cpp 25B
CWechatHelper.vcxproj.user 165B
framework.h 392B
CWechatHelper.h 39B
resource.h 1KB
Rapidjson
istreamwrapper.h 4KB
reader.h 91KB
cursorstreamwrapper.h 2KB
encodings.h 29KB
allocators.h 10KB
prettywriter.h 10KB
fwd.h 4KB
stringbuffer.h 4KB
ostreamwrapper.h 2KB
filereadstream.h 3KB
memorystream.h 3KB
msinttypes
stdint.h 9KB
inttypes.h 8KB
pointer.h 57KB
writer.h 26KB
document.h 115KB
schema.h 101KB
rapidjson.h 23KB
memorybuffer.h 3KB
stream.h 7KB
filewritestream.h 3KB
error
error.h 6KB
en.h 4KB
encodedstream.h 10KB
internal
stack.h 7KB
biginteger.h 9KB
ieee754.h 3KB
meta.h 6KB
strfunc.h 2KB
diyfp.h 12KB
pow10.h 4KB
regex.h 25KB
strtod.h 9KB
itoa.h 10KB
dtoa.h 8KB
swap.h 1KB
JsonHelper.h 377B
RecordObject.cpp 2KB
targetver.h 300B
CWechatHelper.vcxproj.filters 2KB
HttpHelper.cpp 4KB
small.ico 45KB
CWechatHelper.cpp 4KB
Debug
CWechatHelper.ilk 1003KB
CWechatHelper.exe 328KB
CWechatHelper.pdb 1.56MB
共 60 条
- 1
八爪鱼keepmoving8
- 粉丝: 390
- 资源: 31
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4