[英]how to download/uplaod file over HTTPS using Indy 10 and OpenSSL in delphi?
我希望我使用Indy下載文件。 我的問題是連接到SSL。 請幫助我使用HTTPS或SFTP執行此操作。
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
IdFTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdFTP1);
IdFTP1.UseTLS:=utUseRequireTLS;
IdFTP1.DataPortProtection:=ftpdpsPrivate;
IdFTP1.Host := '127.0.0.1';
IdFTP1.Username := 'ftp';
IdFTP1.Password := '123';
IdFTP1.Port:=21;
IdSSLIOHandlerSocketOpenSSL1.StartSSL;
try
IdFTP1.Connect;
IdFTP1.Disconnect;
finally
IdFTP1.Free;
end;
end;
你正確地做到了(除了你釋放你不在同一代碼中創建的組件的事實)。 HTTPS也是如此。
IdHTTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create();
IdHTTP1.Get('https://...');
請注意,您需要OpenSSL庫https://indy.fulgan.com/ZIP/SSL.zip或任何您想要的版本來自https://indy.fulgan.com/SSL/
SFTP和FTPS之間也存在差異。 Indy的IdFTP支持SSL(FTPS)。 它不能與SFTP(使用SSH的FTP)一起使用。 如果要使用SFTP,則必須使用其他商業組件https://www.eldos.com/sbb/delphi-sftp.php
如果顯示錯誤,則應指定任何錯誤。 可能只缺少SSL庫。 如果您不知道如何下載/上傳文件,可以采用相應的方法
IdFTP1.Put (upload)
IdFTP1.Get (download)
IdHTTP1.Put/Post (upload)
IdHTTP1.Get (download)
您將需要來自單元“IdMultipartFormData”的TIdMultiPartFormDataStream,以便HTTP Post上傳文件
嗨,這是一個例子
function HttpGetFile(sUrl, sFile: String) : Boolean;
var
GetData : TFileStream;
begin
Result := False;
try
GetData := TFileStream.Create(sFile, fmOpenWrite or fmCreate);
try
//IdHTTP.ProxyParams.ProxyServer := '';
//IdHTTP.ProxyParams.ProxyPort := 0;
//IdHTTP.ProxyParams.ProxyUsername := '';
//IdHTTP.ProxyParams.ProxyPassword := '';
//IdHTTP.ProxyParams.BasicAuthentication := False;
//IdHTTP.ProtocolVersion := pv1_1;
//IdHTTP.Request.Pragma := 'no-cache';
//IdHTTP.Request.Connection := 'Keep-Alive';
//IdHTTP.Request.AcceptLanguage := 'en';
//IdHTTP.Request.Referer := sTargetUrl;
//NOTE needs files ssleay32.dll and libeay32.dll
if (bSecure) and ( FileExists( ExtractFilePath(Application.ExeName) + 'ssleay32.dll'))
then begin
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method :=
sslvSSLv23;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions :=
[sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
sTargetUrl := HTTPS+UPLOAD_URL;
end
else begin
IdHTTP.IOHandler := nil;
sTargetUrl := HTTP+UPLOAD_URL;
end;
IdHTTP.Get(sUrl, GetData);
Result := (IdHTTP.ResponseCode = 200);
finally
GetData.Free;
end;
except
on E: EIdOSSLCouldNotLoadSSLLibrary do
ShowMessage(E.message);
on E: EIdHTTPProtocolException do
ShowMessage(E.message);
on E: EIdConnClosedGracefully do
ShowMessage(E.message);
on E: EIdSocketError do
ShowMessage(E.message);
on E: EIdException do
ShowMessage(E.message);
on E: Exception do
ShowMessage(E.message);
end;
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.