X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=Robots%2Fbkmk_rurllib2.py;h=a5714a19abd4e0d1c0e2b76404d23b0dd143f129;hb=97202bf84e9c78d8fac912a82a85fb1cbb233a4b;hp=b15a7b0dfea49c9d19b014ebb65052dd5027a552;hpb=27c6253f3e707d0b90e67ee52f78e1335482e17e;p=bookmarks_db.git diff --git a/Robots/bkmk_rurllib2.py b/Robots/bkmk_rurllib2.py index b15a7b0..a5714a1 100644 --- a/Robots/bkmk_rurllib2.py +++ b/Robots/bkmk_rurllib2.py @@ -5,7 +5,7 @@ This file is a part of Bookmarks database and Internet robot. """ __author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2014 PhiloSoft Design" +__copyright__ = "Copyright (C) 2014-2017 PhiloSoft Design" __license__ = "GNU GPL" __all__ = ['robot_urllib2'] @@ -14,12 +14,22 @@ __all__ = ['robot_urllib2'] import sys import httplib import urllib2 -from Robots.bkmk_robot_base import robot_base +from Robots.bkmk_robot_base import robot_base, get_error + + +_fw = None + +class FTPHandler(urllib2.FTPHandler): + def connect_ftp(self, user, passwd, host, port, dirs, timeout): + global _fw + _fw = urllib2.FTPHandler.connect_ftp(self, user, passwd, host, port, + dirs, timeout) + return _fw opener = urllib2.OpenerDirector() default_classes = [urllib2.HTTPHandler, urllib2.HTTPDefaultErrorHandler, - urllib2.FTPHandler, urllib2.HTTPErrorProcessor] + FTPHandler, urllib2.HTTPErrorProcessor] if hasattr(httplib, 'HTTPS'): default_classes.insert(0, urllib2.HTTPSHandler) for klass in default_classes: @@ -35,7 +45,7 @@ _x_user_agent = "bookmarks_db (Python %d.%d.%d; urllib2)" % ( class robot_urllib2(robot_base): - def get(self, bookmark, url, accept_charset=False): + def get(self, bookmark, url, accept_charset=False): request = urllib2.Request(url) request.add_header('Accept', '*/*') if accept_charset and bookmark.charset: @@ -47,17 +57,37 @@ class robot_urllib2(robot_base): request.add_header('User-agent', _user_agent) request.add_header('X-User-Agent', _x_user_agent) + global _fw + _fw = None + try: response = urllib2.urlopen(request) - except urllib2.HTTPError, e: + + except urllib2.HTTPError as e: if e.code in (301, 302, 303, 307): return None, e.code, e.hdrs['Location'], None, None else: + self.log(' HTTP Error %s: %s' % (e.code, e.msg)) return "HTTP Error %s: %s" % (e.code, e.msg), None, None, None, None - except urllib2.URLError, e: + + except urllib2.URLError as e: + self.log(' URL Error: %s' % e.reason) return "URL Error: %s" % e.reason, None, None, None, None + + except httplib.HTTPException as e: + error = get_error(e) + self.log(' HTTP Exception: %s' % error) + return "HTTP Exception: %s" % error, None, None, None, None + + except IOError as e: + error = get_error(e) + self.log(' I/O Error: %s' % error) + return "I/O Error: %s" % error, None, None, None, None + else: return None, None, None, response.info(), response.read() - def get_ftp_welcome(self): - return '' + def get_ftp_welcome(self): + if _fw is None: + return '' + return _fw.ftp.welcome