From f0054d67f11bf954cd137684950b6aea2a3956b6 Mon Sep 17 00:00:00 2001 From: Alexandre Flament Date: Fri, 4 Dec 2020 20:04:39 +0100 Subject: [PATCH] [fix] wikipedia engine: don't raise an error when the query is not found Add a new parameter "raise_for_status", set by default to True. When True, any HTTP status code >= 300 raise an exception ( #2332 ) When False, the engine can manage the HTTP status code by itself. --- docs/dev/engine_overview.rst | 7 ++++--- searx/engines/wikipedia.py | 4 +++- searx/search.py | 6 ++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/docs/dev/engine_overview.rst b/docs/dev/engine_overview.rst index 0f58af76..0b5f9857 100644 --- a/docs/dev/engine_overview.rst +++ b/docs/dev/engine_overview.rst @@ -134,9 +134,9 @@ The function ``def request(query, params):`` always returns the ``params`` variable. Inside searx, the following paramters can be used to specify a search request: -================== =========== ======================================================================== +================== =========== ========================================================================== argument type information -================== =========== ======================================================================== +================== =========== ========================================================================== url string requested url method string HTTP request method headers set HTTP header information @@ -145,7 +145,8 @@ cookies set HTTP cookies verify boolean Performing SSL-Validity check max_redirects int maximum redirects, hard limit soft_max_redirects int maximum redirects, soft limit. Record an error but don't stop the engine -================== =========== ======================================================================== +raise_for_status bool True by default: raise an exception if the HTTP code of response is >= 300 +================== =========== ========================================================================== example code diff --git a/searx/engines/wikipedia.py b/searx/engines/wikipedia.py index 620ec3c1..9fce170e 100644 --- a/searx/engines/wikipedia.py +++ b/searx/engines/wikipedia.py @@ -37,13 +37,15 @@ def request(query, params): language=url_lang(params['language'])) params['headers']['User-Agent'] = searx_useragent() + params['raise_for_status'] = False + params['soft_max_redirects'] = 2 return params # get response from search-request def response(resp): - if not resp.ok: + if resp.status_code == 404: return [] results = [] diff --git a/searx/search.py b/searx/search.py index 8898f157..8c2ad8d7 100644 --- a/searx/search.py +++ b/searx/search.py @@ -143,7 +143,8 @@ def send_http_request(engine, request_params): response = req(request_params['url'], **request_args) # check HTTP status - response.raise_for_status() + if request_params.get('raise_for_status'): + response.raise_for_status() # check soft limit of the redirect count if len(response.history) > soft_max_redirects: @@ -340,7 +341,8 @@ def default_request_params(): 'url': '', 'cookies': {}, 'verify': True, - 'auth': None + 'auth': None, + 'raise_for_status': True }