WinHttpSendRequest 一次响应写问题问题

人,唯一剥夺不了的,只有知识 / 2023-07-31 / 原文

#include <Windows.h>
#include <winhttp.h>
#include <iostream>
#include <fstream>

#pragma comment(lib, "winhttp.lib")

void SendFileToServer(const std::string& serverURL, const std::string& filePath) {
	 HINTERNET hSession = WinHttpOpen(L"WinHTTP Example/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
     HINTERNET  m_hConnect = WinHttpConnect( hSession, _T("192.168.232.143"), 9100, 0 );
	if (hSession) {
		HINTERNET hConnect = WinHttpOpenRequest(m_hConnect, L"POST", _T("/wb/File?Guid=100&MD5=abcdefg&SourceFileName=22.zip"), NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
		if (hConnect) {
         /*
			CFileParam fileParam(_T("100"),FILE_BLACKB0X);

  


			//设置文件的开始
			vector<BYTE> payloads;
			DWORD dwStartTimeTick =::GetTickCount();
			int nK=3 ,nI=10240 ,nJ=1024  ;int j= 0;int i = 0;int k=0;;
			fileParam.SetTotalLength( 1*nI*nJ);

			for( k=0; k<nK; k++)
			{ 
				int c = 0;
				for(  i = 0 ;i< nI ; i++)
				{
					for(  j= 0; j<nJ ;j++)
					{
						payloads.push_back( 65);
					}
				}
				fileParam.SetStart();
				fileParam.Write( &payloads[0],payloads.size());
				result=CCommunicationFacade::Send(fileParam,pConn);  
				result->GetErrorInfo(errString,&dwErrorCode);

				payloads.clear();


			}

			payloads.clear();
			//设置文件的结束
			fileParam.SetEnd();

			payloads.clear();
			payloads.push_back(10);
			std::wcout<<"now data"<<payloads[0];
			fileParam.Write(&payloads[0],payloads.size());

			*/
		 	if (WinHttpSendRequest(hConnect, L"Content-Type: application/octet-stream", -1L, WINHTTP_NO_REQUEST_DATA, 0, 0, 0)) {
			char buf[100];
			strcpy(buf,"123456789");
	  //	if (WinHttpSendRequest(hConnect, WINHTTP_NO_ADDITIONAL_HEADERS, -1L, buf, strlen(buf), strlen(buf), 0)) {


		//	if (WinHttpSendRequest( hConnect,WINHTTP_NO_ADDITIONAL_HEADERS,	0,WINHTTP_NO_REQUEST_DATA, 0,0, 0)){


				std::string strExtInfo ="sfdfsdffffffffffsfdfdf";

				if ( 0 != strExtInfo.length() ) {
					// 默认可以一次全部写完
					WinHttpWriteData(hConnect, strExtInfo.c_str(), strExtInfo.length(), NULL );
			 	}

     /*
			WinHttpSendRequest( m_hRequest,
				WINHTTP_NO_ADDITIONAL_HEADERS,
				0,
				(LPBYTE)param.GetPostData(),
				param.GetPostDataLen(), 
				param.GetPostDataLen(),   //在http头部的Content字段 
				0 );
			*/

			/*
				std::ifstream file(filePath, std::ios::binary);
				if (file) {
					file.seekg(0, std::ios::end);
					std::streampos fileSize = file.tellg();
					file.seekg(0, std::ios::beg);

					BYTE* pBuffer = new BYTE[fileSize];
					file.read(reinterpret_cast<char*>(pBuffer), fileSize);

					if (WinHttpWriteData(hConnect, pBuffer, static_cast<DWORD>(fileSize), NULL)) {
						if (WinHttpReceiveResponse(hConnect, NULL)) {
							// 处理服务器响应
							DWORD dwStatusCode = 0;
							DWORD dwSize = sizeof(DWORD);
							if (WinHttpQueryHeaders(hConnect, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, NULL, &dwStatusCode, &dwSize, NULL)) {
								if (dwStatusCode == 200) {
									std::cout << "File uploaded successfully" << std::endl;
								} else {
									std::cout << "Failed to upload file. HTTP status code: " << dwStatusCode << std::endl;
								}
							}
						} else {
							std::cout << "Failed to receive response" << std::endl;
						}
					} else {
						std::cout << "Failed to send file data" << std::endl;
					}

					delete[] pBuffer;
					file.close();
				} else {
					std::cout << "Failed to open file" << std::endl;
				}
			
			*/
		 
			
			} 
			
			
			
			else {
				std::cout << "Failed to send request" << std::endl;
			}



		} else {
			std::cout << "Failed to open request" << std::endl;

			 
			 
		}

		WinHttpCloseHandle(hConnect);
		WinHttpCloseHandle(hSession);
	} else {
		std::cout << "Failed to open WinHTTP" << std::endl;
	}
}

int main(int argc, char* argv[])
{
	SendFileToServer("aa","D:\\work\\bin\\2.zip");
	system("PAUSE");
}