WinHttpSendRequest 一次响应写问题问题
#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"); }