]> git.phdru.name Git - bookmarks_db.git/blobdiff - Robots/bkmk_rrequests.py
Feat: For the robot based on requests allow to use a proxy
[bookmarks_db.git] / Robots / bkmk_rrequests.py
index d1bf98bfca2e9b5c758cbf762d51697922f614c6..24b09d6803ef763b24406267599f61bb2df73911 100644 (file)
@@ -20,6 +20,10 @@ requests_ftp.monkeypatch_session()
 
 
 class robot_requests(robot_base):
+    # Pass proxy from the environment like this:
+    # BKMK_ROBOT=requests:proxy=socks5h%3a//localhost%3a1080
+    proxy = None
+
     def get(self, bookmark, url, accept_charset=False):
         try:
             r = requests.Session().get(
@@ -27,11 +31,21 @@ class robot_requests(robot_base):
         except requests.RequestException as e:
             error = str(e)
             self.log('   Error: %s' % error)
-            return error, None, None, None, None
-        else:
-            if r.is_redirect:
-                return None, r.status_code, r.next.url, None, None
-            return None, None, None, r.headers, r.content
+            if self.proxy:
+                error = None
+                self.log('   Retrying with the proxy...')
+                try:
+                    r = requests.get(
+                        url, timeout=self.timeout, allow_redirects=False,
+                        proxies={'http': self.proxy, 'https': self.proxy})
+                except requests.RequestException as e:
+                    error = str(e)
+                    self.log('   Proxy error: %s' % error)
+            if error is not None:
+                return error, None, None, None, None
+        if r.is_redirect:
+            return None, r.status_code, r.next.url, None, None
+        return None, None, None, r.headers, r.content
 
     def get_ftp_welcome(self):
         return ''  # Alas, requests_ftp doesn't store welcome message