diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py index 52bb5f20d..95f996651 100644 --- a/searx/engines/__init__.py +++ b/searx/engines/__init__.py @@ -248,6 +248,8 @@ def update_attributes_for_tor(engine: Engine) -> bool: if using_tor_proxy(engine) and hasattr(engine, 'onion_url'): engine.search_url = engine.onion_url + getattr(engine, 'search_path', '') engine.timeout += settings['outgoing'].get('extra_proxy_timeout', 0) + if hasattr(engine, 'ping_url'): + engine.ping_url = engine.onion_url + getattr(engine, 'ping_path', '') def is_missing_required_attributes(engine): diff --git a/searx/engines/duckduckgo.py b/searx/engines/duckduckgo.py index 17f0fae1c..5fac2a269 100644 --- a/searx/engines/duckduckgo.py +++ b/searx/engines/duckduckgo.py @@ -29,6 +29,7 @@ about = { # engine dependent config categories = ['general', 'web'] paging = True +# ISSUE/FIXME: searx.engines.__init__ won't update this URL. supported_languages_url = 'https://duckduckgo.com/util/u588.js' time_range_support = True send_accept_language_header = True @@ -46,8 +47,13 @@ language_aliases = { time_range_dict = {'day': 'd', 'week': 'w', 'month': 'm', 'year': 'y'} # search-url -url = 'https://lite.duckduckgo.com/lite' -url_ping = 'https://duckduckgo.com/t/sl_l' +base_url = 'https://lite.duckduckgo.com' +onion_url = 'https://duckduckgogg42xjoc72x3sjasowoarfbgcmvfimaftt6twagswzczad.onion' +search_path = '/lite' +ping_path = '/t/sl_l' + +search_url = base_url + search_path +ping_url = 'https://duckduckgo.com' + ping_path # match query's language to a region code that duckduckgo will accept def get_region_code(lang, lang_list=None): @@ -63,7 +69,7 @@ def get_region_code(lang, lang_list=None): def request(query, params): - params['url'] = url + params['url'] = search_url params['method'] = 'POST' params['data']['q'] = query @@ -119,7 +125,7 @@ def request(query, params): def response(resp): headers_ping = dict_subset(resp.request.headers, ['User-Agent', 'Accept-Encoding', 'Accept', 'Cookie']) - get(url_ping, headers=headers_ping) + get(ping_url, headers=headers_ping) if resp.status_code == 303: return []