HTTP POSTアップロードファイル(windinet実現)

5462 ワード

void UploadFile(LPTSTR lpFilePath)
{
    HINTERNET hSession=0;
    HINTERNET hConnect=0;
    HINTERNET hRequest=0;
    
    DWORD dwNumberOfBytesWritten=0;
    DWORD dwBytesSend=0;

    
    INTERNET_BUFFERS BufferIn;

    DWORD dwFlag;

    LPCTSTR boundary=TEXT("-----------------------------67491722032265"); //     
    LPCSTR aboundary="-----------------------------67491722032265"; //ansi

    HANDLE hFile;
    hFile=CreateFile(lpFilePath,
        GENERIC_READ,
        FILE_SHARE_READ|FILE_SHARE_WRITE,
        0,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        0);

    DWORD dwFileSize=GetFileSize(hFile,0);

    
    TCHAR content_type[128];
    _stprintf_s(content_type,TEXT("Content-Type: multipart/form-data; boundary=%s"),boundary);
    LPTSTR referer=TEXT("Referer: http://127.0.0.1/upload/~upload");
    LPTSTR accept=TEXT("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    LPTSTR accept_lan=TEXT("Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
    LPTSTR accept_encoding=TEXT("Accept-Encoding: gzip, deflate");
    LPTSTR user_agent=TEXT("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0");


    hSession=InternetOpen(_T("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0"),
        INTERNET_OPEN_TYPE_PRECONFIG,
        0,
        INTERNET_INVALID_PORT_NUMBER,
        0);
    if (0==hSession)
    {

        return;
    }
        
    hConnect=InternetConnect(hSession,
        TEXT("172.16.1.142"),
        80,
        _T(""),
        _T(""),
        INTERNET_SERVICE_HTTP,
        0,
        0);
    if (0==hConnect)
    {

        InternetCloseHandle(hSession);
        return;
    }



    dwFlag=INTERNET_FLAG_KEEP_CONNECTION;

    hRequest=HttpOpenRequest(hConnect,
        _T("POST"),
        _T("/upload/"),
        HTTP_VERSION,
        0,                //Referrer
        0,                //AcceptTypes 
        dwFlag,
        0);
    if (0==hRequest)
    {

        InternetCloseHandle(hConnect);
        InternetCloseHandle(hSession);
        return;
    }

    HttpAddRequestHeaders(hRequest,content_type,-1,HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
    HttpAddRequestHeaders(hRequest,referer,-1,HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
    HttpAddRequestHeaders(hRequest,accept,-1,HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
    HttpAddRequestHeaders(hRequest,accept_lan,-1,HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);
    HttpAddRequestHeaders(hRequest,accept_encoding,-1,HTTP_ADDREQ_FLAG_ADD|HTTP_ADDREQ_FLAG_REPLACE);

    BYTE* lpBuffer=(BYTE*)VirtualAlloc(0,dwFileSize,MEM_COMMIT,PAGE_READWRITE);
    if (0==lpBuffer)
    {
        InternetCloseHandle(hRequest);
        InternetCloseHandle(hConnect);
        InternetCloseHandle(hSession);
        return;
    }

    DWORD dwRead;
    ReadFile(hFile,lpBuffer,dwFileSize,&dwRead,0);

    CloseHandle(hFile);

    char first_boundary[128];
    char delimiter[128];
    char end_boundary[128];
    sprintf_s(first_boundary,"--%s\r
",aboundary); sprintf_s(delimiter,"\r
--%s\r
",aboundary); sprintf_s(end_boundary,"\r
--%s--\r
",aboundary); LPSTR content_dispos="Content-Disposition: form-data; name=\"fileupload1\"; filename=\"notepad.exe\"\r
"; LPSTR content_type2="Content-Type: application/octet-stream\r
\r
"; LPSTR rn="\r
"; BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); BufferIn.Next = NULL; BufferIn.lpcszHeader = NULL; BufferIn.dwHeadersLength = 0; BufferIn.dwHeadersTotal = 0; BufferIn.lpvBuffer = NULL; BufferIn.dwBufferLength = 0; BufferIn.dwBufferTotal = dwFileSize +strlen(first_boundary) +strlen(content_dispos) +strlen(content_type2) +strlen(end_boundary); //Content-Length: BufferIn.dwOffsetLow = 0; BufferIn.dwOffsetHigh = 0; if (!HttpSendRequestEx(hRequest,&BufferIn,0,0,0)) { InternetCloseHandle(hRequest); InternetCloseHandle(hConnect); InternetCloseHandle(hSession); return; } InternetWriteFile(hRequest,(byte*)first_boundary,strlen(first_boundary),&dwNumberOfBytesWritten); //first boundary InternetWriteFile(hRequest,(byte*)content_dispos,strlen(content_dispos),&dwNumberOfBytesWritten); InternetWriteFile(hRequest,(byte*)content_type2,strlen(content_type2),&dwNumberOfBytesWritten); InternetWriteFile(hRequest,lpBuffer,dwFileSize,&dwNumberOfBytesWritten); // //InternetWriteFile(hRequest,(byte*)delimiter,strlen(delimiter),&dwNumberOfBytesWritten); //deimiter //InternetWriteFile(hRequest,(byte*)content_dispos,strlen(content_dispos),&dwNumberOfBytesWritten); //InternetWriteFile(hRequest,(byte*)content_type2,strlen(content_type2),&dwNumberOfBytesWritten); //... InternetWriteFile(hRequest,(byte*)end_boundary,strlen(end_boundary),&dwNumberOfBytesWritten);//last boundary HttpEndRequest(hRequest,0,0,0); InternetCloseHandle(hRequest); InternetCloseHandle(hConnect); InternetCloseHandle(hSession); VirtualFree(lpBuffer,0,MEM_RELEASE); }
 
転載先:https://www.cnblogs.com/microzone/p/3383230.html