feature!: параметр user_agent убран, UA всегда родной; docs/Usage.md
- user_agent в запросе → 422 с подсказкой брать UA из ответа: UA, отличный от реального Chrome, расходится с userAgentData и движком, Cloudflare такой браузер не пропускает (замер: родной 3/3, Chrome 147 и Windows — 0) (#87) - профиль хранит только отпечаток (экран, DPR), UA не подменяется (#89) - docs/Usage.md: практики для клиентов API — тот же UA и прокси, что у браузера, сессии, cookies, ошибки и повторы, таймауты, пример на httpx - README, docs/API.md, docs/Introduction.md; тесты под новый контракт Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0ae5b0c83f
commit
fe509c25c3
11 files changed
+202
-125
No files matched your search
+11
-1
@@ -66,7 +66,6 @@ class SolveRequest(BaseModel):
|
||||
url: str
|
||||
proxy: str | None = None
|
||||
timeout: int | None = None
|
||||
user_agent: str | None = None
|
||||
cookies: list[dict[str, Any]] | None = None
|
||||
# List[{name: str, value: str, domain: str, path: str, expires: float, httpOnly: bool, secure: bool, sameSite: Union["Lax", "None", "Strict"], partitionKey: Union[str, None]}]
|
||||
|
||||
@@ -89,6 +88,17 @@ class SolveRequest(BaseModel):
|
||||
wait: int = 0
|
||||
google_search: bool = False
|
||||
|
||||
@model_validator(mode="before")
|
||||
@classmethod
|
||||
def reject_browser_identity(cls, data):
|
||||
# UA и размер окна задаёт сам браузер: подмена расходится с userAgentData и движком,
|
||||
# и Cloudflare такой браузер не пропускает (см. docs/Usage.md)
|
||||
if isinstance(data, dict) and "user_agent" in data:
|
||||
raise ValueError(
|
||||
"user_agent is not supported: take user_agent from the response instead (see docs/Usage.md)"
|
||||
)
|
||||
return data
|
||||
|
||||
@field_validator("proxy")
|
||||
@classmethod
|
||||
def check_proxy(cls, proxy: str | None) -> str | None:
|
||||
|
||||
Reference in new issue
Block a user