[wininet] помогите неразумному(((

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by RedFern.89, 13 May 2010.

  1. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    557
    Likes Received:
    45
    Reputations:
    0
    при передачи файла на сервер, программа виснет! Код процедуры:

    Code:
    function UploadFileToServer(aurl: string; FileName: string): boolean;
    var
      hSession       : hInternet;
      hConnect       : hInternet;
      hRequest       : hInternet;
      hFile          : THandle;
      RequestFlags   : DWORD;
      Sum            : DWORD;
      dwBytesRead    : DWORD;
      dwBytesWritten : DWORD;
      pBuffer        : DWORD;
      bRead, bRet    : boolean;
      BufferIn       : INTERNET_BUFFERS;
      _post, Headers,
      boundary       : string;
    begin
      boundary := '--------' + FormatDateTime('mmddyyhhnnsszzz ', Now); { not localize }
     _post := 'note=vk&font1=decor&font2=20&orient=h&size1=x&size2=1024x768&rotate=00&flip=0&mini=300x225&opt3[]=zoom&email=';
    
      headers := 'Content-Type: multipart/form-data; boundary=' + boundary;
    
      pBuffer := 1024;
      hSession := InternetOpen('Delphi/7.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
    
      hConnect := InternetConnect(hSession, PChar(GetHost(AUrl)), 80, nil, nil,
                                  INTERNET_SERVICE_HTTP, 0, 0);
    
      RequestFlags := INTERNET_FLAG_NO_CACHE_WRITE or  INTERNET_FLAG_KEEP_CONNECTION;
    
      hRequest := HttpOpenRequest(hConnect, 'POST', '/index.php', 'HTTP/1.1', nil, nil,
                                  RequestFlags, 0);
    
      hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    
      ZeroMemory(@BufferIn, SizeOf(BufferIn));
      BufferIn.dwStructSize := SizeOf(INTERNET_BUFFERS);
      BufferIn.dwBufferTotal := GetFileSize(hFile, nil);
      BufferIn.lpcszHeader := PChar(Headers);
      BufferIn.dwHeadersLength := Length(Headers);
    
      HttpSendRequestEx(hRequest, @BufferIn, nil, HSR_INITIATE, 0);
    
      Sum := 0;
      bRead := True;
      bRet := True;
    
      repeat
        bRead := ReadFile(hFile, pBuffer, SizeOf(pBuffer), dwBytesRead, nil);
        bRet := InternetWriteFile(hRequest, @pBuffer, dwBytesRead, dwBytesWritten);
        sum := sum + dwBytesWritten;
      until dwBytesRead = SizeOf(pBuffer);
    
    
     HttpEndRequest(hRequest, nil, 0, 0);
    
      CloseHandle(hFile);
      InternetCloseHandle(hSession);
      InternetCloseHandle(hConnect);
      InternetCloseHandle(hRequest);    
    end;
    
     
  2. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    скорее всего цикл
    бесконечный
     
  3. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    557
    Likes Received:
    45
    Reputations:
    0
    закоментил строку HttpEndRequest(hRequest, nil, 0, 0); и виснуть перестало. Однако запрос не передается по нормальному.