Альтернативные клиентские библиотеки FTP для Erlang - PullRequest
6 голосов
/ 31 марта 2011

В библиотеке OTP есть не менее двух клиентских библиотек HTTP для Erlang в дополнение к httpc (что обычно считается ошибочным и неуклюжим): ibrowse и lhttpc.Существуют ли альтернативы ftp?

Ответы [ 2 ]

2 голосов
/ 29 мая 2015

Я понимаю, что это старый вопрос, но, надеюсь, другие найдут это полезным:

lftpc - это «облегченный FTP-клиент Erlang», смоделированный после lhttpc и dlhttpc , который мы использовали в производстве в течение последних 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 файла: example и test, мы возвращаемся:

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-level и low-level в зависимости от ваших потребностей. Вы можете всегда опускаться до lftpc:request/3,4,5,6 и lftpc:start_transfer/3, чтобы сделать что-нибудь нестандартное.

2 голосов
/ 31 марта 2011

Вы можете или не можете найти это полезным, но я могу объяснить, что мы сделали для нашего проекта.Нам специально нужно было использовать sftp в Erlang, и мы обнаружили, что он глючит и несовместим с некоторыми конфигурациями сервера.В итоге мы написали простой клиент ftp / sftp на Java, используя jsch и используя JInterface для подключения его к Erlang.Мы потеряли пару дней, пытаясь бороться с реализацией Erlang ftp и заставить ее работать, но в конечном итоге закончили разработку и тестирование реализации на Java с JInterface всего за несколько часов.Удачи.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...