Пример #1
0
def convert_requests_exceptions(log, func, *args, **kwargs):
    '''
    Run a requests command, catching exceptions and reraising them as
    DownloadException. Status errors, such as 404 or 500 do not cause
    exceptions, instead exposed as not response.ok.
    e.g.
    >>> convert_requests_exceptions(log, requests.get, url, timeout=url_timeout)
    runs:
        res = requests.get(url, timeout=url_timeout)
    '''
    from requests_ssl import SSLv3Adapter
    try:
        try:
            response = func(*args, **kwargs)
        except requests.exceptions.ConnectionError, e:
            if 'SSL23_GET_SERVER_HELLO' not in str(e):
                raise
            log.info('SSLv23 failed so trying again using SSLv3: %r', args)
            requests_session = requests.Session()
            requests_session.mount('https://', SSLv3Adapter())
            func = {
                requests.get: requests_session.get,
                requests.post: requests_session.post
            }[func]
            response = func(*args, **kwargs)

    except requests.exceptions.ConnectionError, e:
        raise DownloadException('Connection error: %s' % e)
Пример #2
0
                'saved_file': None,
                'url_redirected_to': None,
                'request_type': 'GET'
            }
        except Exception, e:
            resource_blacklist.status_code = 408
            raise DownloadException(_('FTP download error'))
    try:
        try:
            response = func(*args, **kwargs)
        except requests.exceptions.ConnectionError, e:
            if 'SSL23_GET_SERVER_HELLO' not in str(e):
                raise
            log.info('SSLv23 failed so trying again using SSLv3: %r', args)
            requests_session = requests.Session()
            requests_session.mount('https://', SSLv3Adapter())
            func = {
                requests.get: requests_session.get,
                requests.post: requests_session.post
            }[func]
            response = func(*args, **kwargs)

    except requests.exceptions.ConnectionError, e:
        resource_blacklist.add_url_blacklist(e.args[0].reason.errno)
        raise DownloadException(_('Connection error: %s') % e)
    except requests.exceptions.HTTPError, e:
        raise DownloadException(_('Invalid HTTP response: %s') % e)
    except requests.exceptions.Timeout, e:
        resource_blacklist.add_url_blacklist(100)
        raise DownloadException(
            _('Connection timed out after %ss') % kwargs.get('timeout', '?'))