]> git.phdru.name Git - bookmarks_db.git/blob - Robots/bkmk_rrequests.py
Refactor(Rebobt/requests)
[bookmarks_db.git] / Robots / bkmk_rrequests.py
1 """Robot based on requests
2
3 This file is a part of Bookmarks database and Internet robot.
4
5 """
6
7 __author__ = "Oleg Broytman <phd@phdru.name>"
8 __copyright__ = "Copyright (C) 2024 PhiloSoft Design"
9 __license__ = "GNU GPL"
10
11 __all__ = ['robot_requests']
12
13
14 import requests
15 import requests_ftp
16
17 from Robots.bkmk_robot_base import robot_base
18
19 requests_ftp.monkeypatch_session()
20
21
22 class robot_requests(robot_base):
23     # Pass proxy from the environment like this:
24     # BKMK_ROBOT=requests:proxy=socks5h%3a//localhost%3a1080
25     proxy = None
26
27     def get(self, bookmark, url, accept_charset=False):
28         error, r = request_get(url, self.timeout, None)
29         if error is not None:
30             self.log('   Error: %s' % error)
31             if self.proxy:
32                 self.log('   Retrying with the proxy...')
33                 error, r = request_get(url, self.timeout, self.proxy)
34         if error is not None:
35             if self.proxy:
36                 self.log('   Proxy error: %s' % error)
37             return error, None, None, None, None
38         if r.is_redirect:
39             return None, r.status_code, r.next.url, None, None
40         return None, None, None, r.headers, r.content
41
42     def get_ftp_welcome(self):
43         return ''  # Alas, requests_ftp doesn't store welcome message
44
45
46 def request_get(url, timeout, proxy):
47     if proxy:
48         proxies = {'http': proxy, 'https': proxy}
49     else:
50         proxies = None
51
52     try:
53         r = requests.Session().get(
54             url, timeout=timeout, allow_redirects=False, proxies=proxies)
55     except requests.RequestException as e:
56         return str(e), None
57     else:
58         return None, r