Erlang的替代FTP客户端库

时间:2011-03-31 09:05:50

标签: ftp erlang

除了OTP库中的httpc之外,还有至少两个用于Erlang的HTTP客户端库(通常被认为是错误和笨重的):ibrowselhttpc。是否有与ftp类似的替代方案?

2 个答案:

答案 0 :(得分:2)

您可能会或可能不会觉得这很有用,但我可以解释一下我们为项目做了些什么。我们特别需要在Erlang中使用sftp,并发现它有些错误且与某些服务器配置不兼容。我们最终使用 jsch 在Java中编写了一个简单的ftp / sftp客户端,并使用JInterface将其连接到Erlang。我们浪费了几天试图与Erlang的ftp实现作斗争并使其工作,但最终在几个小时内最终用JInterface开发和测试Java实现。祝你好运。

http://www.jcraft.com/jsch/

答案 1 :(得分:2)

我意识到这是一个老问题,但希望其他人会觉得这很有用:

lftpc是一个“轻量级Erlang FTP客户端”,模仿lhttpcdlhttpc后我们在过去6个月左右的生产中使用过。

目前还没有很好地记录,但这是一个使用test.rebex.net的例子:

1> lftpc:start().
ok
2> {ok, {_, _, Socket}} = lftpc:connect("test.rebex.net", 21, []).
{ok,{undefined,{220,[<<"FTP on test.rebex.net ready...">>]},
               <0.65.0>}}
3> lftpc:login(Socket, [{username, <<"demo">>}, {password, <<"password">>}], infinity, []).
{ok,[{undefined,{331,[<<"Password required for demo.">>]},
                undefined},
     {undefined,{230,[<<"User demo logged in.">>]},undefined}]}
4> lftpc:cd(Socket, <<"pub">>, infinity, []).
{ok,{undefined,{250,
                [<<"CWD command successful. \"/pub\" is current directory.">>]},
               undefined}}

默认情况下,没有用于控制或数据连接的解码器。因此,当我们列出包含2个文件的目录时:exampletest我们会回来:

5> lftpc:nlist(Socket, infinity, []).
{ok,{{150,
      [<<"Data connection accepted from 173.198.175.141:53504; transfer starting.">>]},
     {226,[<<"Transfer ok.">>]},
     [<<"example\r\ntest\r\n">>]}}

我们可以指定data_decoder

6> lftpc:nlist(Socket, infinity, [{partial_download, []}, {data_decoder, lftpc_format:nlst_decoder()}]).
{ok,{{150,
      [<<"Data connection accepted from 127.0.0.1:54359; transfer starting.">>]},
     {226,[<<"Transfer ok.">>]},
     [[<<"example">>,<<"test">>]]}}

我们还可以指定partial_download以块的形式接收数据:

7> {ok, {_, Download}} = lftpc:nlist(Socket, infinity, [{partial_download, []}, {data_decoder, lftpc_format:nlst_decoder()}]).
{ok,{{150,
      [<<"Data connection accepted from 127.0.0.1:54403; transfer starting.">>]},
     <0.86.0>}}
8> receive {data_part, Download, Data} -> Data end.
[<<"example">>,<<"test">>]
9> receive {ftp_eod, Download, Message} -> Message end.
{226,[<<"Transfer ok.">>]}

查看主src/lftpc.erl文件,根据您的需要有high-levellow-level个功能。您可以随时下至lftpc:request/3,4,5,6lftpc:start_transfer/3进行自定义操作。