Что я делаю
После успешного входа в систему Драматурга я извлекаю определенные файлы cookie и создаю заголовки следующим образом:
python
Код: Выделить всё
# Extract cookies after Playwright login
all_cookies = {c["name"]: c["value"] for c in context.cookies()}
COOKIES = {k: all_cookies[k] for k in REQUIRED_KEYS if k in all_cookies}
# Build headers — csrf-token comes from a cookie value
HEADERS = {
"accept": "application/json",
"csrf-token": COOKIES.get("CSRF_COOKIE", ""),
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
}
# Make the authenticated request
response = requests.get(
"https://example.com/api/data",
headers=HEADERS,
cookies=COOKIES
)
print(response.status_code) # Returns 403
Ответ 403 Запрещено, хотя:
- Вход в Playwright успешен (браузер успешно перенаправляется на главный канал)
- Файл cookie токена сеанса присутствует и извлекается правильно
- Заголовок csrf-token устанавливается на основе значения файла cookie
- Передача всех файлов cookie напрямую из context.cookies() — тот же результат 403
- Фильтрация только необходимых сеанс + файлы cookie CSRF — по-прежнему 403
- Использование request.Session() и загрузка в него файлов cookie — по-прежнему 403
- Драматург иногда заключает значения файлов cookie в дополнительные кавычки, например «\"value\"» — я удаляю их вручную, но не уверен, что это вызывает проблему
python
Код: Выделить всё
def clean(v):
v = v.strip()
if v.startswith('"') and v.endswith('"'):
try:
return json.loads(v)
except Exception:
return v.strip('"')
return v
all_cookies = {c["name"]: clean(c["value"]) for c in context.cookies()}
Как передать файлы cookie сеанса Playwright в вызов запросов, чтобы сервер принял их как действительный сеанс с аутентификацией?