Beispiel #1
0
class Requests:
    def __init__(self):
        self.proxies = Proxies()

    def request(self, method, url, **kwargs):
        exception = None
        TRIES = 10
        for i in range(TRIES):
            try:
                with self.proxies.borrow() as proxy:
                    kwargs['proxies'] = dict(http='http://%s:%s' % (proxy.host, proxy.port),
                                             https='https://%s:%s' % (proxy.host, proxy.port))
                    kwargs['timeout'] = (10, 20)
                    response = requests.request(method=method, url=url, **kwargs)
                    if response.headers['content-type'] == 'application/json':
                        response.json()  # avoiding incorrect json even if 200
                    return response
            except Exception as e:
                log.warning('Got exception %s try(%s/%s)' % (e, i + 1, TRIES))
                exception = e
        raise exception

    def get(self, url, params=None, **kwargs):
        kwargs.setdefault('allow_redirects', True)
        return self.request('get', url, params=params, **kwargs)

    def options(self, url, **kwargs):
        kwargs.setdefault('allow_redirects', True)
        return self.request('options', url, **kwargs)

    def head(self, url, **kwargs):
        kwargs.setdefault('allow_redirects', False)
        return self.request('head', url, **kwargs)

    def post(self, url, data=None, json=None, **kwargs):
        return self.request('post', url, data=data, json=json, **kwargs)

    def put(self, url, data=None, **kwargs):
        return self.request('put', url, data=data, **kwargs)

    def patch(self, url, data=None, **kwargs):
        return self.request('patch', url, data=data, **kwargs)

    def delete(self, url, **kwargs):
        return self.request('delete', url, **kwargs)