mirror of
https://github.com/Hopiu/linkchecker.git
synced 2026-04-07 00:00:58 +00:00
also check path info
git-svn-id: https://linkchecker.svn.sourceforge.net/svnroot/linkchecker/trunk/linkchecker@659 e7d03fd6-7b0d-0410-9947-9c21f3af8025
This commit is contained in:
parent
eea60506b5
commit
930641b13d
1 changed files with 44 additions and 7 deletions
|
|
@ -45,24 +45,61 @@ class FtpUrlData (ProxyUrlData):
|
|||
name=self.name)
|
||||
http.buildUrl()
|
||||
return http.check()
|
||||
# no proxy
|
||||
_user, _password = self._getUserPassword()
|
||||
# using no proxy here
|
||||
# get login credentials
|
||||
if self.userinfo:
|
||||
_user, _password = splitpasswd(self.userinfo)
|
||||
else:
|
||||
_user, _password = self.getUserPassword()
|
||||
if _user is None or _password is None:
|
||||
raise linkcheck.error, linkcheck._("No user or password found")
|
||||
self.login(_user, _password)
|
||||
filename = self.cwd()
|
||||
if filename:
|
||||
self.retrieve(filename)
|
||||
|
||||
|
||||
def login (self, _user, _password):
|
||||
"""log into ftp server and check the welcome message"""
|
||||
# ready to connect
|
||||
try:
|
||||
self.urlConnection = ftplib.FTP()
|
||||
self.urlConnection.connect(self.urlparts[1])
|
||||
self.urlConnection.login(_user, _password)
|
||||
except EOFError:
|
||||
raise linkcheck.error, linkcheck._("Remote host has closed connection")
|
||||
info = self.urlConnection.getwelcome()
|
||||
if not info:
|
||||
if not self.urlConnection.getwelcome():
|
||||
self.closeConnection()
|
||||
raise linkcheck.error, linkcheck._("Got no answer from FTP server")
|
||||
self.setInfo(info)
|
||||
# dont set info anymore, this may change every time we logged in
|
||||
#self.setInfo(info)
|
||||
|
||||
|
||||
def cwd (self):
|
||||
"""change directory to given path"""
|
||||
# leeched from webcheck
|
||||
dirs = self.urlparts[2].split('/')
|
||||
filename = dirs.pop()
|
||||
if len(dirs) and not dirs[0]: del dirs[0]
|
||||
for d in dirs:
|
||||
self.urlConnection.cwd(d)
|
||||
return filename
|
||||
|
||||
|
||||
def retrieve (self, filename):
|
||||
"""intiate download of given filename"""
|
||||
self.urlConnection.voidcmd('TYPE I')
|
||||
conn, size = self.urlConnection.ntransfercmd('RETR %s'%filename)
|
||||
if size:
|
||||
self.checkSize(size)
|
||||
#page = conn.makefile().read(size)
|
||||
#else:
|
||||
# page = conn.makefile().read()
|
||||
|
||||
|
||||
def closeConnection (self):
|
||||
try: self.urlConnection.quit()
|
||||
except: pass
|
||||
try:
|
||||
self.urlConnection.quit()
|
||||
except ftplib.all_errors:
|
||||
self.urlConnection.close()
|
||||
self.urlConnection = None
|
||||
|
|
|
|||
Loading…
Reference in a new issue