Fallback mint/TOS HTTP from broken curl_cffi TLS to std requests.
Windows hosts hitting OPENSSL_internal:invalid library (curl 35) now retry SSO OAuth and post-reg TOS/NSFW via standard requests so CPA export can proceed.
This commit is contained in:
1 parent
fc879c09ea
commit
2e833f2af3
2 files changed
+214
-54
No files matched your search
+92
-20
@@ -2012,6 +2012,9 @@ def set_birth_date(session, log_callback=None):
|
||||
)
|
||||
return False, f"set_birth_date HTTP {res.status_code}: {response_preview(res)}"
|
||||
except Exception as e:
|
||||
# TLS 库损坏类错误上抛,供 enable_nsfw_for_token 切到 std requests
|
||||
if _is_curl_tls_error(e):
|
||||
raise
|
||||
if log_callback:
|
||||
log_callback(f"[set_birth_date] 异常: {e}")
|
||||
return False, f"set_birth_date 异常: {e}"
|
||||
@@ -2042,6 +2045,8 @@ def set_tos_accepted(session, log_callback=None):
|
||||
)
|
||||
return False, f"set_tos_accepted HTTP {res.status_code}: {response_preview(res)}"
|
||||
except Exception as e:
|
||||
if _is_curl_tls_error(e):
|
||||
raise
|
||||
if log_callback:
|
||||
log_callback(f"[set_tos_accepted] 异常: {e}")
|
||||
return False, f"set_tos_accepted 异常: {e}"
|
||||
@@ -2082,35 +2087,102 @@ def update_nsfw_settings(session, log_callback=None):
|
||||
)
|
||||
return False, f"update_nsfw_settings HTTP {res.status_code}: {response_preview(res)}"
|
||||
except Exception as e:
|
||||
if _is_curl_tls_error(e):
|
||||
raise
|
||||
if log_callback:
|
||||
log_callback(f"[update_nsfw] 异常: {e}")
|
||||
return False, f"update_nsfw_settings 异常: {e}"
|
||||
|
||||
|
||||
def _is_curl_tls_error(exc) -> bool:
|
||||
text = str(exc or "").lower()
|
||||
return any(
|
||||
n in text
|
||||
for n in (
|
||||
"openssl_internal:invalid library",
|
||||
"tls connect error",
|
||||
"curl: (35)",
|
||||
"failed to perform, curl: (35)",
|
||||
"ssl_error_syscall",
|
||||
"ssl connect error",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def _make_post_reg_session(proxies=None, *, prefer: str = "curl"):
|
||||
"""注册后 set_tos / nsfw 用的 session;curl TLS 坏了时回退 std requests。"""
|
||||
prefer = (prefer or "curl").strip().lower()
|
||||
if prefer != "requests":
|
||||
try:
|
||||
return requests.Session(impersonate="chrome120", proxies=proxies)
|
||||
except TypeError:
|
||||
# 极老 curl_cffi 无 impersonate
|
||||
try:
|
||||
return requests.Session(proxies=proxies)
|
||||
except Exception:
|
||||
pass
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
import requests as std_requests
|
||||
except ImportError as exc: # pragma: no cover
|
||||
raise RuntimeError("需要 curl_cffi 或 requests") from exc
|
||||
sess = std_requests.Session()
|
||||
if proxies:
|
||||
sess.proxies.update(proxies)
|
||||
return sess
|
||||
|
||||
|
||||
def enable_nsfw_for_token(token, cf_clearance="", log_callback=None):
|
||||
proxies = get_proxies()
|
||||
user_agent = get_user_agent()
|
||||
log = log_callback or (lambda *_: None)
|
||||
|
||||
def _run(session):
|
||||
cookie_parts = [f"sso={token}", f"sso-rw={token}"]
|
||||
if cf_clearance:
|
||||
cookie_parts.append(f"cf_clearance={cf_clearance}")
|
||||
session.headers.update(
|
||||
{
|
||||
"user-agent": user_agent,
|
||||
"cookie": "; ".join(cookie_parts),
|
||||
}
|
||||
)
|
||||
ok, message = set_tos_accepted(session, log_callback)
|
||||
if not ok:
|
||||
return False, message
|
||||
ok, message = set_birth_date(session, log_callback)
|
||||
if not ok:
|
||||
return False, message
|
||||
ok, message = update_nsfw_settings(session, log_callback)
|
||||
if not ok:
|
||||
return False, message
|
||||
return True, "成功开启 NSFW"
|
||||
|
||||
def _close(session):
|
||||
try:
|
||||
session.close()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
with requests.Session(impersonate="chrome120", proxies=proxies) as session:
|
||||
cookie_parts = [f"sso={token}", f"sso-rw={token}"]
|
||||
if cf_clearance:
|
||||
cookie_parts.append(f"cf_clearance={cf_clearance}")
|
||||
session.headers.update(
|
||||
{
|
||||
"user-agent": user_agent,
|
||||
"cookie": "; ".join(cookie_parts),
|
||||
}
|
||||
)
|
||||
ok, message = set_tos_accepted(session, log_callback)
|
||||
if not ok:
|
||||
return False, message
|
||||
ok, message = set_birth_date(session, log_callback)
|
||||
if not ok:
|
||||
return False, message
|
||||
ok, message = update_nsfw_settings(session, log_callback)
|
||||
if not ok:
|
||||
return False, message
|
||||
return True, "成功开启 NSFW"
|
||||
session = _make_post_reg_session(proxies, prefer="curl")
|
||||
try:
|
||||
return _run(session)
|
||||
except Exception as exc:
|
||||
if not _is_curl_tls_error(exc):
|
||||
return False, f"异常: {exc}"
|
||||
log(f"[Debug] curl TLS 异常,set_tos/nsfw 回退 requests: {exc}")
|
||||
_close(session)
|
||||
session = _make_post_reg_session(proxies, prefer="requests")
|
||||
try:
|
||||
return _run(session)
|
||||
finally:
|
||||
_close(session)
|
||||
session = None
|
||||
finally:
|
||||
if session is not None:
|
||||
_close(session)
|
||||
except Exception as e:
|
||||
return False, f"异常: {str(e)}"
|
||||
|
||||
|
||||
Reference in new issue
Block a user