diff --git a/src/ashare_dp/config.py b/src/ashare_dp/config.py index 151aac6..815da70 100644 --- a/src/ashare_dp/config.py +++ b/src/ashare_dp/config.py @@ -23,7 +23,7 @@ class Settings(BaseSettings): # AKShare akshare_max_retries: int = 3 akshare_retry_delay: float = 1.0 - akshare_backend: str = "auto" # auto, em (East Money), sina + akshare_backend: str = "sina" # auto, em (East Money), sina # Realtime realtime_poll_interval: int = 5 diff --git a/src/ashare_dp/data/akshare_client.py b/src/ashare_dp/data/akshare_client.py index bd02962..177a3f4 100644 --- a/src/ashare_dp/data/akshare_client.py +++ b/src/ashare_dp/data/akshare_client.py @@ -43,6 +43,24 @@ def _getproxies_direct(): urllib.request.getproxies = _getproxies_direct logger.debug("Proxy disabled: env vars cleared + macOS SystemConfiguration bypassed") +# === Patch requests to add Referer header for Sina (required from HK) === +import requests as _requests +_original_session_request = _requests.Session.request + + +def _patched_session_request(self, method, url, **kwargs): + """Inject Referer header for Sina finance domains so they don't 403.""" + if isinstance(url, str) and "sina.com.cn" in url: + headers = kwargs.get("headers", {}) + if isinstance(headers, dict) and "Referer" not in headers: + headers = dict(headers) + headers["Referer"] = "https://finance.sina.com.cn" + kwargs["headers"] = headers + return _original_session_request(self, method, url, **kwargs) + + +_requests.Session.request = _patched_session_request + def _to_akshare_date(d: date) -> str: return d.strftime("%Y%m%d")