Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Connect Through a Traditional FTP Proxy
See more FTP Examples
Demonstrates connecting through a traditional FTP application proxy or firewall using ProxyHostname, ProxyPort, ProxyUsername, ProxyPassword, and ProxyMethod.
Background: A traditional FTP proxy speaks FTP and relays your login to the real server using one of several site-specific handshake sequences — which is why
ProxyMethod exists: it selects the exact USER/PASS/SITE order the proxy expects (0 means no FTP proxy). The proxy's own credentials are separate from the FTP server login. Choose the ProxyMethod value that matches your firewall's documented behavior.Chilkat Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.Ftp2;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
ftp: TFtp2;
begin
success := False;
ftp := TFtp2.Create;
ftp.Hostname := 'ftp.example.com';
ftp.Username := 'myFtpLogin';
// The FTP proxy/firewall to connect through.
ftp.ProxyHostname := 'ftp-proxy.example.com';
ftp.ProxyPort := 21;
// The proxy's own credentials (distinct from the FTP server login).
ftp.ProxyUsername := 'myProxyLogin';
ftp.ProxyPassword := 'myProxyPassword';
// ProxyMethod selects the login sequence the proxy expects. 0 (default) means no FTP proxy;
// values 1 and up select specific USER/PASS/SITE sequences documented for the property.
ftp.ProxyMethod := 1;
// Normally you would not hard-code the password in source. You should instead obtain it
// from an interactive prompt, environment variable, or a secrets vault.
ftp.Password := 'myPassword';
success := ftp.Connect();
if (success = False) then
begin
WriteLn(ftp.LastErrorText);
Exit;
end;
WriteLn('Connected through the FTP proxy.');
success := ftp.Disconnect();
if (success = False) then
begin
WriteLn(ftp.LastErrorText);
Exit;
end;
ftp.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.