BOOL SendPostQequest(IN TCHAR *ptszlpDwownURL,
IN char *ptszSendDateail,
OUT string &strReturnTexe)
{
HINTERNET hInternetOpen = NULL;
HINTERNET hHttpConnect = NULL;
HINTERNET hHttpRequest = NULL;
//BYTE *pMessageBody = NULL; // 保存文件的指针
try
{
// 先判断是否联网
if (!::InternetCheckConnection(ptszlpDwownURL, FLAG_ICC_FORCE_CONNECTION, 0))
{
throw 0;
}
// 解析URL以及他的组成部分
TCHAR szHostName[128] = {0};
TCHAR szUrlPath[512] = {0};
URL_COMPONENTS stUrlAnalysis;
ZeroMemory(&stUrlAnalysis, sizeof (URL_COMPONENTS));
stUrlAnalysis.dwStructSize = sizeof(URL_COMPONENTS);
stUrlAnalysis.dwHostNameLength = sizeof(char)*128;
stUrlAnalysis.dwUrlPathLength = sizeof(char)*512;
stUrlAnalysis.lpszHostName = szHostName;
stUrlAnalysis.lpszUrlPath = szUrlPath;
// 解析域名
if(!::InternetCrackUrl(ptszlpDwownURL, 0, ICU_ESCAPE, &stUrlAnalysis))
{
throw 0;
}
//初始化WinInet,获取跟句柄
hInternetOpen = ::InternetOpenA(NULL,INTERNET_OPEN_TYPE_PRECONFIG ,NULL,NULL,0);
if (NULL == hInternetOpen)
{
throw 0;
}
//打开一个HTTP的文件协议
hHttpConnect = ::InternetConnect( hInternetOpen,
szHostName,
INTERNET_DEFAULT_HTTPS_PORT,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
NULL,
0);
if (NULL == hHttpConnect)
{
throw 0;
}
//打开HTTP请求句柄
LPCTSTR TexeType[2] = {_T("*/*"),NULL};
hHttpRequest = ::HttpOpenRequest(hHttpConnect,
_T("POST"),
szUrlPath,
NULL,
NULL,
TexeType,
INTERNET_FLAG_RELOAD|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_CACHE_WRITE|
INTERNET_FLAG_SECURE|INTERNET_FLAG_IGNORE_CERT_CN_INVALID,
0);
if (NULL == hHttpRequest)
{
throw 0;
}
AGAIN:
//string strPackageHead = "Accept-Encoding: gzip\r\n";
// 添加header 信息
//if (!HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE))
//{
// int u = GetLastError();
//}
Accept-Language
//strPackageHead = "User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)\r\n";
//HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
//strPackageHead = "Content-Length: 830\r\n";
//HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
//strPackageHead = "Connection: Keep-Alive\r\n";
//HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
//strPackageHead = "Host: login.mobile.reg2t.sandai.net:443\r\n";
//HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
/*strPackageHead = "Content-Length: 524\r\n";
HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
strPackageHead = "Expires: Mon, 01 Jun 2015 19:20:07 GMT\r\n";
HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
strPackageHead = "Cache-Control: max-age=43200\r\n";
HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);*/
// Server: nginx/1.2.2
// Date: Sat, 30 May 2015 08:25:36 GMT
// Content-Type: application/octet-stream
// Connection: keep-alive
// Content-Length: 524
// Expires: Sat, 30 May 2015 20:25:36 GMT
// Cache-Control: max-age=43200
//HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
//HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
//HttpAddRequestHeadersA(hHttpRequest, strPackageHead.data(), -1, HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
/*=====================================================================
// 发送大量数据包的方法
//===================================================================*/
//int x = 0;
要发送的消息
//string strPostNews = ptszSendDateail /*CW2A((LPCWSTR)ptszSendDateail)*/;
//INTERNET_BUFFERS BufferIn = {0};
//BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );
//BufferIn.dwBufferTotal = 524;
//if(!HttpSendRequestEx(hHttpRequest, &BufferIn, NULL, 0, 0))
//{
// if (ERROR_INTERNET_INVALID_CA == GetLastError())
// {
// DWORD dwFlags;
// DWORD dwBuffLen = sizeof(dwFlags);
// InternetQueryOption (hHttpRequest, INTERNET_OPTION_SECURITY_FLAGS,(LPVOID)&dwFlags, &dwBuffLen);
// dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
// InternetSetOption (hHttpRequest, INTERNET_OPTION_SECURITY_FLAGS,&dwFlags, sizeof (dwFlags) );
// goto AGAIN;
// }
//}
//DWORD written = 0;
//if(!InternetWriteFile(hHttpRequest, (LPVOID)(LPCTSTR)ptszSendDateail, 524, &written))
//{
// x = GetLastError();
//}
//if(!HttpEndRequest(hHttpRequest, NULL, 0, 0))
//{
// x = GetLastError();
//}
/*=====================================================================
// 发送大量数据包结束
//===================================================================*/
// 包头 -复杂的包头需要用另外的函数
string strInfoHead = "Content-Type: application/x-www-form-urlencoded\r\n\r\n";
// 要发送的消息
string strPostNews = ptszSendDateail /*CW2A((LPCWSTR)ptszSendDateail)*/;
int u = strPostNews.size();
//向服务器发送这个请求
if (!::HttpSendRequestA(hHttpRequest,
NULL/*strInfoHead.data()*/ ,
0/*strInfoHead.length()*/,
ptszSendDateail,
strPostNews.size()))
{
if (ERROR_INTERNET_INVALID_CA == GetLastError())
{
DWORD dwFlags;
DWORD dwBuffLen = sizeof(dwFlags);
InternetQueryOption (hHttpRequest, INTERNET_OPTION_SECURITY_FLAGS,(LPVOID)&dwFlags, &dwBuffLen);
dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
InternetSetOption (hHttpRequest, INTERNET_OPTION_SECURITY_FLAGS,&dwFlags, sizeof (dwFlags) );
goto AGAIN;
}
}
//检查HTTP响应消息的头
//DWORD dwInfoBufferLength = 0;
//BYTE *pInfoBuffer =NULL;
// //接收服务器返回的信息 (在此为获取文件的大小)
//while (!::HttpQueryInfo(hHttpRequest,
// HTTP_QUERY_COOKIE,
// pInfoBuffer,
// &dwInfoBufferLength,
// NULL))
//{
// DWORD dwError = GetLastError();
// if (dwError == ERROR_INSUFFICIENT_BUFFER)
// {
// // 传递给参数的缓冲区太小
// pInfoBuffer = (BYTE *)new BYTE[dwInfoBufferLength+1];
// }
// else
// {
// break;
// //throw 0;
// }
//}
//pInfoBuffer[dwInfoBufferLength] = '\0';
// 将文件大小由字串转换到整型然后释放我们上面的空间
DWORD dwBytesRead = 0;
BYTE pMessageBody[100] = {0};
char GetInfo[100] = {0};
do
{
// 开始下载返回的文本
if(!::InternetReadFile(hHttpRequest, pMessageBody,sizeof(pMessageBody)-1, &dwBytesRead))
{
throw 0;
}
memcpy(GetInfo,pMessageBody,dwBytesRead);
strReturnTexe += GetInfo;
memset(pMessageBody,0,sizeof(BYTE)*100);
memset(GetInfo,0,sizeof(char)*100);
} while (NULL != dwBytesRead);
}
catch(...)
{
if (NULL != hInternetOpen)
{
::InternetCloseHandle(hInternetOpen);
}
if (NULL != hHttpConnect)
{
::InternetCloseHandle(hHttpConnect);
}
if (NULL != hHttpRequest)
{
::InternetCloseHandle(hHttpRequest);
}
/*if (NULL != pMessageBody)
{
delete[] pMessageBody;
}*/
return FALSE;
}
return TRUE;
}
https 的post数据
最新推荐文章于 2021-03-10 02:19:12 发布