https 的post数据

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值