From 3b573e0f89bd4d0154603c3cb7b8d795c03f7f93 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Wed, 8 Jul 2026 20:53:08 +0200 Subject: [PATCH] [fix] heexy: use cookies for cacheft token Heexy now passes the cacheft token via cookies and no longer via HTTP headers. Hence, the engine is broken without that change. --- searx/engines/heexy.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/searx/engines/heexy.py b/searx/engines/heexy.py index f566a7953..1eadfb477 100644 --- a/searx/engines/heexy.py +++ b/searx/engines/heexy.py @@ -13,13 +13,12 @@ It seems to use Bing internally, as the image thumbnails are loaded from Bing. from urllib.parse import urlencode import typing as t -from lxml import html from searx.enginelib import EngineCache from searx.network import get from searx.exceptions import SearxEngineAPIException, SearxEngineAccessDeniedException from searx.result_types import EngineResults -from searx.utils import eval_xpath, extract_text, gen_useragent +from searx.utils import gen_useragent if t.TYPE_CHECKING: from searx.extended_types import SXNG_Response @@ -73,8 +72,7 @@ def _get_api_token(query: str) -> str: if not resp.ok: raise SearxEngineAPIException("failed to obtain request token: invalid response code") - doc = html.fromstring(resp.text) - token = extract_text(eval_xpath(doc, "//html/@data-cacheft")) + token = resp.cookies["cacheft"] if not token: raise SearxEngineAPIException("failed to obtain request token: no token found") @@ -92,8 +90,9 @@ def request(query: str, params: "OnlineParams") -> None: args["lang"] = params["searxng_locale"].split("-")[0] params["url"] = f"{api_url}/search/{heexy_categ}?{urlencode(args)}" - params["headers"]["X-Data-Cacheft"] = _get_api_token(query) + params["headers"]["Origin"] = api_url + params["cookies"]["cacheft"] = _get_api_token(query) def response(resp: "SXNG_Response"):