【问题标题】:How to connect to FTP using ftp://userName@host如何使用 ftp://userName@host 连接到 FTP
【发布时间】:2019-07-11 12:16:56
【问题描述】:

我无法连接到 FTP 服务器。大多数时候,我会像这样连接到 FTP 服务器:

// ftp is TidFTP
ftp.Host := '119.xxx.xxx.133';
ftp.Username := 'fnc';
ftp.Password := 'fnc';
ftp.Port := 21;
ftp.ConnectTimeout := 5000;
ftp.Connect;

我们的管理员给了我这样的链接

ftp://fnc@119.xxx.xxx.133/Files/

访问 FTP。用户名为fnc,端口为21,密码为fnc

如果我通过 Windows 资源管理器访问 FTP,我不会收到任何错误,我可以完美地放置文件。但是,如果我在代码中执行此操作,则每当我尝试放置文件时都会出现 illegal port command 错误。

请注意,我可以使用上面的代码连接到 ftp 服务器,但不能将任何文件放在那里。 提前致谢。

【问题讨论】:

  • 您的链接没有密码...ftp://fnc:fnc@119.....
  • ftp 是 TidFTP。 @jery,如果我使用链接“fnc:fnc@119.xxx.xxx.133:21/Files”,它将在 Windows 资源管理器上运行,但会在代码中出错。

标签: delphi ftp


【解决方案1】:

给定一个 FTP URL,您需要解析该 URL 并将其组件分配给各种 TIdFTP 属性和方法,例如:

var
  URL: string;
  Uri: TIdURI;
begin
  ...
  URL := ...; // 'ftp://fnc:fnc@119.xxx.xxx.133/Files/'
  Uri := TIdURI.Create(URL);
  try
    ftp.Host := Uri.Host;
    if Uri.Port <> '' then
      ftp.Port := StrToInt(Uri.Port)
    else
      ftp.Port := 21;
    ftp.Username := Uri.Username;
    ftp.Password := Uri.Password;
    ftp.ConnectTimeout := 5000;
    ftp.Connect;
    if Uri.Path <> '/' then
      ftp.ChangeDir(Uri.Path);
    ...
  finally
    Uri.Free;
  end;
  ...
end;

【讨论】:

    【解决方案2】:
    ftp.passive := True
    

    就是答案。感谢 Rufo 爵士。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      相关资源
      最近更新 更多