--- /dev/null
+"""Robot based on curl-cffi
+
+This file is a part of Bookmarks database and Internet robot.
+
+"""
+
+__author__ = "Oleg Broytman <phd@phdru.name>"
+__copyright__ = "Copyright (C) 2025 PhiloSoft Design"
+__license__ = "GNU GPL"
+
+__all__ = ['robot_curlcffi']
+
+
+from curl_cffi import requests
+import curl_cffi
+
+from Robots.base import robot_base
+from Robots.util import get_ftp
+
+
+class robot_curlcffi(robot_base):
+ def version_str(self):
+ return 'curl-cffi/%s' % curl_cffi.__version__
+
+ async def get(self, url, req_headers, use_proxy=False):
+ if url.startswith('ftp://'):
+ error, welcome, body = get_ftp(url, self.timeout)
+ if error is not None:
+ return error, None, None, None
+ self.welcome = welcome
+ return None, None, None, body
+
+ if use_proxy:
+ proxies = {'http': self.proxy, 'https': self.proxy}
+ else:
+ proxies = None
+
+ error = r = None
+ try:
+ r = requests.get(url, headers=req_headers,
+ timeout=self.timeout,
+ allow_redirects=False, proxies=proxies,
+ verify=False, impersonate='firefox133')
+ except curl_cffi.CurlError as e:
+ error = str(e)
+ return error, None, None, None
+
+ return None, r.status_code, r.headers, r.content
+
+ def get_ftp_welcome(self):
+ welcome = self.welcome
+ self.welcome = ''
+ return welcome
--- /dev/null
+"""Robot based on curl-cffi and concurrent.futures,
+processes multiple URLs in parallel (multiprocess).
+
+This file is a part of Bookmarks database and Internet robot.
+
+"""
+
+__author__ = "Oleg Broytman <phd@phdru.name>"
+__copyright__ = "Copyright (C) 2025 PhiloSoft Design"
+__license__ = "GNU GPL"
+
+__all__ = ['robot_multicurlcffi']
+
+
+from Robots.concurrent_futures import cf_multiprocess
+
+
+class robot_multicurlcffi(cf_multiprocess):
+ robot_name = 'curlcffi'
. bkmk_db-venv/bin/activate &&
pip install --compile --upgrade setuptools \
beautifulsoup4 lxml m_lib.full \
- "requests[socks]" "httpx[socks]" \
+ "requests[socks]" "httpx[socks]" pycurl curl-cffi \
aiohttp aiohttp-socks "aioftp[socks]"
}
fi
WHAT'S NEW
+Version 6.4.0 (2025-??-??)
+
+ Robots based on curl-cffi.
+
Version 6.3.0 (2025-03-02)
Robots based on pycurl.
+Version 6.4.0 (2025-??-??)
+
+ Robots based on curl-cffi.
+
Version 6.3.0 (2025-03-02)
Robots based on pycurl.
from bkmk_objects import parse_params, set_params
robot_names, robot_params = parse_params(
- environ.get("BKMK_ROBOT", "multirequests,multihttpx,aio"))
+ environ.get("BKMK_ROBOT",
+ "multicurlcffi,multirequests,multihttpx,curlcffi,aio"))
def import_robot(robot_name):
'requests': ['requests[socks]'],
'httpx': ['httpx[socks]'],
'curl': 'pycurl',
+ 'curlcffi': 'curl-cffi',
'aiohttp': ['aiohttp>=3', 'aiohttp-socks', 'aioftp[socks]'],
},
)