summaryrefslogtreecommitdiff
path: root/searx
diff options
context:
space:
mode:
authorMarkus Heiser <markus.heiser@darmarit.de>2025-10-17 16:57:41 +0200
committerMarkus Heiser <markus.heiser@darmarIT.de>2025-10-18 09:05:54 +0200
commite840e3f96025537edbcfa9a5c61a2a05934edfc7 (patch)
tree76d88db90ade5710c4f375e0c76ec8a65cf65277 /searx
parenta6bb1ecf87908187ba9cb8190462132749235e1c (diff)
[fix] engine mullvadleta - ignore HTTP 403 & 429 response
It doesn't matter if you're using Mullvad's VPN and a proper browser, you'll still get blocked for specific searches [1] with a 403 or 429 HTTP status code. Mullvad only blocks the search request and doesn't prevent you from doing more searches. The logic should handle the blocked requests (403, 429), but not put the engine on a cooldown. [1] https://leta.mullvad.net/search?q=site%3Afoo+bar&engine=brave Closes: https://github.com/searxng/searxng/issues/5328 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
Diffstat (limited to 'searx')
-rw-r--r--searx/engines/mullvad_leta.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/searx/engines/mullvad_leta.py b/searx/engines/mullvad_leta.py
index 0ad549b35..f494e812d 100644
--- a/searx/engines/mullvad_leta.py
+++ b/searx/engines/mullvad_leta.py
@@ -43,9 +43,12 @@ import babel
from httpx import Response
from lxml import html
from searx.enginelib.traits import EngineTraits
+from searx.extended_types import SXNG_Response
+
from searx.locales import get_official_locales, language_tag, region_tag
from searx.utils import eval_xpath_list
from searx.result_types import EngineResults, MainResult
+from searx.network import raise_for_httperror
search_url = "https://leta.mullvad.net"
@@ -112,7 +115,8 @@ class DataNodeResultIndices(t.TypedDict):
favicon: int
-def request(query: str, params: dict):
+def request(query: str, params: dict[str, t.Any]) -> None:
+ params["raise_for_httperror"] = False
params["method"] = "GET"
args = {
"q": query,
@@ -136,10 +140,19 @@ def request(query: str, params: dict):
params["url"] = f"{search_url}/search/__data.json?{urlencode(args)}"
- return params
+def response(resp: SXNG_Response) -> EngineResults:
+ results = EngineResults()
+
+ if resp.status_code in (403, 429):
+ # It doesn't matter if you're using Mullvad's VPN and a proper browser,
+ # you'll still get blocked for specific searches with a 403 or 429 HTTP
+ # status code.
+ # https://github.com/searxng/searxng/issues/5328#issue-3518337233
+ return results
+ # raise for other errors
+ raise_for_httperror(resp)
-def response(resp: Response) -> EngineResults:
json_response = resp.json()
nodes = json_response["nodes"]
@@ -159,7 +172,6 @@ def response(resp: Response) -> EngineResults:
query_items_indices = query_meta_data["items"]
- results = EngineResults()
for idx in data_nodes[query_items_indices]:
query_item_indices: DataNodeResultIndices = data_nodes[idx]
results.add(