FTP example going through a FTP Proxy

J

jakecjacobson

Hi,

I need to write a simple Python script that I can connect to a FTP
server and download files from the server to my local box. I am
required to go through a FTP Proxy and I don't see any examples on how
to do this. The FTP proxy doesn't require username or password to
connect but the FTP server that I am connecting to does.

Any examples on how to do this would be greatly appreciated. I am
limited to using Python version 2.4.3 on a Linux box.
 
J

jakecjacobson

Hi,

I need to write a simple Python script that I can connect to a FTP
server and download files from the server to my local box.  I am
required to go through a FTP Proxy and I don't see any examples on how
to do this.  The FTP proxy doesn't require username or password to
connect but the FTP server that I am connecting to does.

Any examples on how to do this would be greatly appreciated.  I am
limited to using Python version 2.4.3 on a Linux box.

This is what I have tried so far,

import urllib

proxies = {'ftp':'ftp://proxy_server:21'}
ftp_server = 'ftp.somecompany.com'
ftp_port='21'
username = 'aaaa'
password = 'secretPW'

ftp_string='ftp://' + username + '@' + password + ftp_server + ':' +
ftp_port


data = urllib.urlopen(ftp_string, proxies=proxies)

data=urllib.urlopen(req).read()

print data

I get the following error:

Traceback (most recent call last):
File "./ftptest.py", line 22, in ?
data = urllib.urlopen(ftp_server, proxies=proxies)
File "/usr/lib/python2.4/urllib.py", line 82, in urlopen
return opener.open(url)
File "/usr/lib/python2.4/urllib.py", line 190, in open
return getattr(self, name)(url)
File "/usr/lib/python2.4/urllib.py", line 470, in open_ftp
host, path = splithost(url)
File "/usr/lib/python2.4/urllib.py", line 949, in splithost
match = _hostprog.match(url)
TypeError: expected string or buffer
 
J

jakecjacobson

This is what I have tried so far,

import urllib

proxies = {'ftp':'ftp://proxy_server:21'}
ftp_server = 'ftp.somecompany.com'
ftp_port='21'
username = 'aaaa'
password = 'secretPW'

ftp_string='ftp://' + username + '@' + password + ftp_server + ':' +
ftp_port

data = urllib.urlopen(ftp_string, proxies=proxies)

data=urllib.urlopen(req).read()

print data

I get the following error:

Traceback (most recent call last):
  File "./ftptest.py", line 22, in ?
    data = urllib.urlopen(ftp_server, proxies=proxies)
  File "/usr/lib/python2.4/urllib.py", line 82, in urlopen
    return opener.open(url)
  File "/usr/lib/python2.4/urllib.py", line 190, in open
    return getattr(self, name)(url)
  File "/usr/lib/python2.4/urllib.py", line 470, in open_ftp
    host, path = splithost(url)
  File "/usr/lib/python2.4/urllib.py", line 949, in splithost
    match = _hostprog.match(url)
TypeError: expected string or buffer

I might be getting closer. Now I am getting "I/O error(ftp error):
(111, 'Connection refused')" error with the following code:

import urllib2

proxies = {'ftp':'ftp://proxy_server:21'}
ftp_server = 'ftp.somecompany.com'
ftp_port='21'
username = 'aaaa'
password = 'secretPW'

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = ftp_server
password_mgr.add_password(None, top_level_url, username, password)

proxy_support = urllib2.ProxyHandler(proxies)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(proxy_support)
opener = urllib2.build_opener(handler)
a_url = 'ftp://' + ftp_server + ':' + ftp_port + '/'
print a_url

try:
data = opener.open(a_url)
print data
except IOError, (errno, strerror):
print "I/O error(%s): %s" % (errno, strerror)
 
J

jakecjacobson

I might be getting closer.  Now I am getting "I/O error(ftp error):
(111, 'Connection refused')" error with the following code:

import urllib2

proxies = {'ftp':'ftp://proxy_server:21'}
ftp_server = 'ftp.somecompany.com'
ftp_port='21'
username = 'aaaa'
password = 'secretPW'

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
top_level_url = ftp_server
password_mgr.add_password(None, top_level_url, username, password)

proxy_support = urllib2.ProxyHandler(proxies)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(proxy_support)
opener = urllib2.build_opener(handler)
a_url = 'ftp://' + ftp_server + ':' + ftp_port + '/'
print a_url

try:
        data = opener.open(a_url)
        print data
except IOError, (errno, strerror):
        print "I/O error(%s): %s" % (errno, strerror)

I tried the same code from a different box and got a different error
message:

I/O error(ftp error): 501 USER format: proxy-user:auth-
method@destination. Closing connection.

My guess is that my original box couldn't connect with the firewall
proxy so I was getting a connection refused error. Now it appears
that the password mgr has an issue if I understand the error
correctly. I really hope that someone out in the Python Community can
give me a pointer.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,225
Members
46,815
Latest member
treekmostly22

Latest Threads

Top