5

コードを動作させることができません:/

4

4 に答える 4

9

最終的に、Web上でいくつかの実用的な例を見つけました

static char szRawData[5000];
  memset(szRawData, 0x11, sizeof(szRawData));

  //
  // CIHandle is just a wrapper class for HINTERNET, that closes handle in destructor
  //
  CIHandle hIntrn = InternetOpen( "LiveUpdate"), 
                                  INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,
                                  NULL,
                                  NULL,
                                  0);
  if (!hIntrn)
    return printf("No Internet connection: %li.\n", GetLastError());

  CIHandle hConn = InternetConnect( hIntrn, 
                                    "65.254.250.104",
                                    INTERNET_DEFAULT_HTTP_PORT,
                                    NULL,
                                    NULL,
                                    INTERNET_SERVICE_HTTP,
                                    0,
                                    NULL);
  if (!hConn)
    return printf("Connection to update server failed: %li.\n", GetLastError());

  DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |
                             INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS |
                             INTERNET_FLAG_KEEP_CONNECTION |
                             INTERNET_FLAG_NO_AUTO_REDIRECT |
                             INTERNET_FLAG_NO_COOKIES |
                             INTERNET_FLAG_NO_CACHE_WRITE |
                             INTERNET_FLAG_NO_UI |
                             INTERNET_FLAG_RELOAD;

  CIHandle hReq = HttpOpenRequest(hConn,
                                  "POST",
                                  "upload.php",
                                  "HTTP/1.0",
                                  NULL,
                                  NULL,
                                  dwOpenRequestFlags,
                                  NULL);

  ZString strBoundary = "---------------------------autoupdater";
  ZString strContentHeader =  "Host: www.mydomain_at_powweb.com\r\n"
                              "Content-Type: multipart/form-data; boundary=";
  strContentHeader+=strBoundary;

  HttpAddRequestHeaders(hReq, strContentHeader, strContentHeader.length(), HTTP_ADDREQ_FLAG_ADD);


  ZString strHeaders;
  strHeaders.precache(16384);
  sprintf(strHeaders,
          "--%s\r\n"
          "Content-Disposition: form-data; name=\"userfile\"; "
          "filename=\"test.raw\"\r\n"
          "Content-Type: application/octet-stream\r\n\r\n",
          (LPCTSTR)strBoundary);

  tCharSeq s;//this is a just a dynamic array of bytes;
  //
  // append headers and file to request:
  //
  s.precache(16384);
  s.append(strHeaders.length(), strHeaders);
  //append with file data:
  s.append(2000, szRawData); //<------------------- depending on this size, SendRequest fails.
  //trailing end of data:
  s.append(4,"\r\n--");
  s.append(strBoundary.length(), (LPTSTR)strBoundary);
  s.append(4,"--\r\n");

  InternetSetOption(hReq, INTERNET_OPTION_USERNAME, "username\0", 9);
  InternetSetOption(hReq, INTERNET_OPTION_PASSWORD, "password\0", 9);

  if (!HttpSendRequest(hReq, NULL, 0, (void*)s.getBuffer(), s.length()))
    return printf("HttpSendRequest failed: %li.\n", GetLastError());
于 2009-01-28T15:15:20.193 に答える
1

MSDN にはサンプルの良い例があります: Using HttpSendRequestEx for Large POST Requests
には、HTTP サーバーがデータを受信するための ASP ファイルも含まれています。msdn ページで自己解凍ファイル 'Hsrex.exe' をダウンロードしてください。

于 2012-07-13T07:25:57.283 に答える
1

c/c++ で wininet を使用する方法の簡単で完全なコードを見つけることができなかったので、ビットとピースから、将来訪問して理解できない人のために簡単でシンプルな c コードを書きました。コードは任意のファイルをアップロードできます(バイナリ、テキスト、mp3....) を指定したホスト名に変換し、バックエンドには php (以下のコード) を使用します。

#include<windows.h>
#include<stdio.h>
#include<wininet.h>

int main(int argc,char *argv[])
{
    if(argc!=4)
    {
        printf("USAGE:fileuploader.exe hostname scriptname filename");
        exit(1);
    }
    HANDLE hfile=CreateFile(argv[3],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
    if(hfile==INVALID_HANDLE_VALUE)
    {
        printf("creatfile error %lu",GetLastError());
        exit(1);
    }
    DWORD filesize=GetFileSize(hfile,NULL);
    //STARTING PREPARING THE WININET CODE.
    PCHAR szstart = "Content-Type: multipart/form-data; boundary=----qwerty";
    PCHAR szData    = "------qwerty\r\n"
                      "Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"\r\n"
                      "Content-Type: application/octet-stream\r\n"
                      "Content-Transfer-Encoding: binary\r\n\r\n";
    PCHAR szDataEnd = "\r\n------qwerty--\r\n";
    char szheaders[1024];
    wsprintf(szheaders,szData,"filetoupload",argv[3]);
    HINTERNET hsession,hconnect,hrequest;
    DWORD bytesread,byteswritten,contentlen;
    hsession=InternetOpen("fileuploader",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
    if(!hsession)
    {
        printf("internet open error %lu",GetLastError());
        exit(1);
    }
    hconnect=InternetConnect(hsession,argv[1],INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
    hrequest=HttpOpenRequest(hconnect,"POST",argv[2],NULL,NULL,0,0,0);
    contentlen=lstrlen(szheaders)+filesize+lstrlen(szDataEnd);
    LPBYTE pbuf=(LPBYTE)malloc(contentlen);
    CopyMemory(&pbuf[0],szheaders,lstrlen(szheaders));
    ReadFile(hfile,&pbuf[lstrlen(szheaders)],filesize,&bytesread,NULL);
    CopyMemory(&pbuf[lstrlen(szheaders)+filesize],szDataEnd,lstrlen(szDataEnd));
    HttpSendRequest(hrequest,szstart,lstrlen(szstart),pbuf,contentlen);
    char testbuf[1024];
    InternetReadFile(hrequest,testbuf,(DWORD)sizeof(testbuf),&byteswritten);
    printf("%s",testbuf);


}

そして、これが私が一緒に使用するphpコードです

<?php
if(isset($_FILES["filetoupload"]))
{
    $path="C:/xampp/htdocs/";
    $path=$path.basename($_FILES['filetoupload']['name']);
    print($path);
    if(move_uploaded_file($_FILES['filetoupload']['tmp_name'],$path))
    {
        print("upload success");
    }
    else
    {
        print("no success");

    }

}


?>

<html>
<body>
<form action="fileupload.php" method="post" enctype="multipart/form-data">  
    Select File:  
    <input type="file" name="filetoupload"/>  
    <input type="submit" value="Upload Image" name="submit"/>  
</form>  
</body>
</html>
于 2020-04-27T11:25:49.070 に答える
1

Microsoft の簡単な例を次に示します。

   static TCHAR hdrs[] =
      _T("Content-Type: application/x-www-form-urlencoded");
   static TCHAR frmdata[] =
      _T("name=John+Doe&userid=hithere&other=P%26Q");
  static LPSTR accept[2]={"*/*", NULL};

   // for clarity, error-checking has been removed
   HINTERNET hSession = InternetOpen("MyAgent",
      INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
   HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
      INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
   HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
      _T("FormActionHere"), NULL, NULL, accept, 0, 1);
   HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
   // close any valid internet-handles

例はhereから来ています。

于 2009-01-23T00:11:08.503 に答える