winhttp WinHttpConnect

复制代码
#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) {
            if (WinHttpSendRequest(hConnect, L"Content-Type: application/octet-stream", -1L, WINHTTP_NO_REQUEST_DATA, 0, 0, 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");
}
复制代码

 

posted on   lydstory  阅读(77)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-07-31 前端
2020-07-31 非阻塞socket
2020-07-31 vscode 中文
2020-07-31 curses
2020-07-31 Trie
2020-07-31 c tcp server
2020-07-31 linux高性能服务器编程(tcp超时)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示