librefi/librefi/fxckers/_common.py

47 lines
1.8 KiB
Python
Raw Normal View History

2020-11-29 05:05:37 +01:00
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
2020-08-30 16:26:29 +02:00
import requests
from ..utils import get_user_agent, absolute_url
2020-08-30 16:26:29 +02:00
class BaseFxcker:
2020-09-05 03:24:34 +02:00
def __init__(self, logger, log_level):
self.cookie_jar = requests.cookies.RequestsCookieJar()
2020-09-14 00:10:13 +02:00
self.user_agent = get_user_agent()
2020-09-05 03:24:34 +02:00
self.log = logger(key=self.FXCKER_KEY, log_level=log_level)
2020-08-30 16:26:29 +02:00
@property
def FXCKER_KEY(self):
return self.__class__.__name__[:-6]
def request(self, method, url, resource=None,
2020-10-15 12:51:57 +02:00
follow_redirects=True, redirect_count=0, **kwargs):
2020-08-30 16:26:29 +02:00
kwargs["cookies"] = self.cookie_jar
if not kwargs.get("headers"):
2020-08-30 16:26:29 +02:00
kwargs["headers"] = {}
if not kwargs["headers"].get("User-Agent"):
2020-09-14 00:10:13 +02:00
kwargs["headers"]["User-Agent"] = self.user_agent
if not kwargs.get("allow_redirects"):
2020-09-11 16:07:03 +02:00
kwargs["allow_redirects"] = False
2020-09-05 03:24:34 +02:00
self.log.info("Requesting " +
2020-10-15 12:51:57 +02:00
(resource if resource is not None
else (str(method) + " " + str(url)))
+ (" (redirect #%d)" % (redirect_count)
if redirect_count > 0
else ""))
sess = requests.Session()
req = sess.request(method, url, **kwargs)
self.cookie_jar.update(sess.cookies)
if follow_redirects is True and req.headers.get("Location"):
kwargs["data"] = None
kwargs["headers"]["Referer"] = url
new_url = absolute_url(req.headers.get("Location"), url)
return self.request("GET", new_url,
resource=resource,
follow_redirects=follow_redirects,
2020-10-15 12:51:57 +02:00
redirect_count=(redirect_count + 1),
**kwargs)
2020-09-11 16:07:03 +02:00
return req