How to download a file over HTTPS using Indy 10 and OpenSSL?

后端 未结 3 604
悲哀的现实
悲哀的现实 2020-12-25 08:59

I have the following task: download a file using HTTPS and authentication. Indy seems the way to go but for some reason it doesn\'t work so far. I have the following in plac

3条回答
  •  余生分开走
    2020-12-25 09:25

    I finally abandoned Indy and OpenSSL and used WinInet for downloading. This is the code that worked for me:

    function Download(URL, User, Pass, FileName: string): Boolean;
    const
      BufferSize = 1024;
    var
      hSession, hURL: HInternet;
      Buffer: array[1..BufferSize] of Byte;
      BufferLen: DWORD;
      F: File;
    begin
       Result := False;
       hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;
    
       // Establish the secure connection
       InternetConnect (
         hSession,
         PChar(FullURL),
         INTERNET_DEFAULT_HTTPS_PORT,
         PChar(User),
         PChar(Pass),
         INTERNET_SERVICE_HTTP,
         0,
         0
       );
    
      try
        hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0) ;
        try
          AssignFile(f, FileName);
          Rewrite(f,1);
          try
            repeat
              InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) ;
              BlockWrite(f, Buffer, BufferLen)
            until BufferLen = 0;
          finally
            CloseFile(f) ;
            Result := True;
          end;
        finally
          InternetCloseHandle(hURL)
        end
      finally
        InternetCloseHandle(hSession)
      end;
    end;
    

提交回复
热议问题