Re: FTPS - How to connect with Ruby?



On Mar 20, 10:40 am, "ChrisKaelin" <c...@xxxxxxxxxxxxxx> wrote:
On 20 Mrz., 17:42, "Jan Veselý" <janvesely....@xxxxxxxxx> wrote:



Hello, I'm new to Ruby and have the first problem I can't solve myself
after a lot of googling - connecting to a FTPS server (FTP AUTH TLS/
SSL).

- there's some library called chilkat, but it's not free (for this
little script it's really too expensive to solve it that way)
- ftpfxp library is targeted on fxp transfers, but it connects ok -
but it doesn't seem like a good library for normal ftp-related work
- the standard ftp library doesn't look like it has some support for
firewall/proxy to get there a program like TLSWrap between client and
server and solve the problem
- I found some curl library in prealfa state that could possibly help
me somehow - but it looks like the last solution when everything else
fails (prealfa, weird installation)

Could you please give me a hint?

Try net/sftp Module. With that I made a backup script on window$ using
scp and/or sftp, because rsync is not available on the server, I have
to back up.

net/sftp project:http://raa.ruby-lang.org/project/net-sftp/


Unfortunately, sftp is a different protocol than FTPS and that module
probably won't help.

(3 months ago I received a spec saying my company would communicate
with another company using SFTP, only to figure out after code had
been written that they meant FTPS.)

I looked in my install of ruby and found a file net/ftptls.rb. That
code looks like it's only for Implicit FTPS, not explicit. I'd try it
anyway.

The code I ended up writing (in Java) was a class that interfaced to
the curl command line client. It worked very well. As dirty as it
seemed at the time, I still think it was better than writing JNI to
the curl C interface.

Here is a quick and dirty class to interface to the curl command line
client from ruby. This should work for FTPS, if your curl client was
compiled with it. curl -V will list the protocols it supports.

class CurlFtp

CURL = "curl"

def initialize(url, user, pass, verbose=false)
@url = url
@user = user
@pass = pass
@verboseFlag = (verbose) ? '-v' : ''
end

def put(path, &block)
command = sprintf "'%s' %s --upload-file - --user '%s:%s' '%s/
%s'",
CURL, @verboseFlag, @user, @pass, @url, path
IO.popen(command, "w", &block)
raise "Curl error: #{$?.to_i / 256}" if $? != 0
end

def get(path, &block)
command = sprintf "'%s' %s --user '%s:%s' '%s/%s'",
CURL, @verboseFlag, @user, @pass, @url, CGI.escape(path)
IO.popen(command, "r", &block)
raise "Curl error: #{$?.to_i / 256}" if $? != 0
end

end

ftp = CurlFtp.new('ftp://localhost:21', 'bcastill', 'pass', false)

ftp.put('/upload/file.txt') do |io|
io.puts("Writing to FTP server....")
end

puts "Getting data:";
ftp.get('/upload/file.txt') do |io|
io.each_line do |line|
puts "LINE: #{line}"
end
end






.



Relevant Pages

  • Re: FTPS Server for OpenVMS (Also posted to the ITRC)
    ... For the client side I have found: ... what is an FTPS server? ... not Secure FTP over SSH. ...
    (comp.os.vms)
  • Re: FTPS - How to connect with Ruby?
    ... after a lot of googling - connecting to a FTPS server (FTP AUTH TLS/ ... I found some curl library in prealfa state that could possibly help ... sftp is a different protocol than FTPS and that module ... the curl command line client. ...
    (comp.lang.ruby)
  • Re: pm for getting the content of a URL.
    ... I want to get a content of a URL (like curl does). ... run on a webhosting company'es server and I do not have libcurl there ... the server belong to "somebody else"-'es a webserver. ... Socket or IO::Socket doesn't care where is the client and where the ...
    (perl.beginners)
  • Re: FTPS Server for OpenVMS (Also posted to the ITRC)
    ... what is an FTPS server? ... Do you mean SFTP (Secure ... SSH, SFTP, etc are available as part of TCP/IP Services for OpenVMS. ...
    (comp.os.vms)
  • FTP Konfiguration
    ... dass ich da mehrere FTPs habe und jeder ... (Win Server 2k3 SP1 Webserver Edition) ... Prev by Date: ... Next by Date: ...
    (microsoft.public.de.inetserver.iis)