From 44f6f2e2138b8b3aecbabb922845199163664b3c Mon Sep 17 00:00:00 2001 From: root Date: Sun, 29 Mar 2026 22:16:41 +0000 Subject: [PATCH] fix: use kwork.ru instead of api.kwork.ru (cookies domain match) --- Untitled.ipynb | 57 ++++++++++++------ .../__pycache__/client.cpython-312.pyc | Bin 63337 -> 63162 bytes src/kwork_api/client.py | 2 +- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/Untitled.ipynb b/Untitled.ipynb index 7593691..072cee7 100644 --- a/Untitled.ipynb +++ b/Untitled.ipynb @@ -2,41 +2,60 @@ "cells": [ { "cell_type": "code", - "execution_count": 22, + "execution_count": 3, "id": "f28552f1-618c-4853-92e2-566554a2de2c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "import asyncio\n", - "from kwork_api import KworkClient\n", - "from dotenv import load_dotenv\n", + "import logging\n", "import os\n", + "from kwork_api import KworkClient\n", "\n", - "load_dotenv('tests/e2e/.env')" + "# Включить логирование\n", + "logging.basicConfig(level=logging.DEBUG) # или INFO для меньшего шума\n" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 4, "id": "953d142e-a575-41b7-927d-8cd1546d2747", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:kwork_api.client:Login request: POST https://kwork.ru/api/user/login (user: None)\n", + "DEBUG:kwork_api.client:Login payload: {'l_username': None, 'l_password': None, 'jlog': 1, 'recaptcha_pass_token': '', 'track_client_id': False, 'smart-token': '', 'l_remember_me': '1'}\n", + "DEBUG:httpcore.connection:connect_tcp.started host='kwork.ru' port=443 local_address=None timeout=30.0 socket_options=None\n", + "DEBUG:httpcore.connection:connect_tcp.complete return_value=\n", + "DEBUG:httpcore.connection:start_tls.started ssl_context= server_hostname='kwork.ru' timeout=30.0\n", + "DEBUG:httpcore.connection:start_tls.complete return_value=\n", + "DEBUG:httpcore.http11:send_request_headers.started request=\n", + "DEBUG:httpcore.http11:send_request_headers.complete\n", + "DEBUG:httpcore.http11:send_request_body.started request=\n", + "DEBUG:httpcore.http11:send_request_body.complete\n", + "DEBUG:httpcore.http11:receive_response_headers.started request=\n", + "DEBUG:httpcore.http11:receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Server', b'QRATOR'), (b'Date', b'Sun, 29 Mar 2026 22:14:13 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Keep-Alive', b'timeout=15'), (b'Vary', b'Accept-Encoding, User-Agent'), (b'Content-Security-Policy', b\"frame-ancestors 'self' https://webvisor.com https://awards.ratingruneta.ru\"), (b'Set-Cookie', b'referrer_url=https%3A%2F%2Fkwork.ru%2F; expires=Sun, 05-Apr-2026 22:14:13 GMT; Max-Age=604800; path=/; secure; HttpOnly; SameSite=None'), (b'Cache-Control', b'no-cache, private'), (b'Strict-Transport-Security', b'max-age=15552000'), (b'X-Content-Type-Options', b'nosniff'), (b'Content-Encoding', b'gzip')])\n", + "INFO:httpx:HTTP Request: POST https://kwork.ru/api/user/login \"HTTP/1.1 200 OK\"\n", + "DEBUG:httpcore.http11:receive_response_body.started request=\n", + "DEBUG:httpcore.http11:receive_response_body.complete\n", + "DEBUG:httpcore.http11:response_closed.started\n", + "DEBUG:httpcore.http11:response_closed.complete\n", + "DEBUG:kwork_api.client:Login response status: 200\n", + "DEBUG:kwork_api.client:Login response headers: {'server': 'QRATOR', 'date': 'Sun, 29 Mar 2026 22:14:13 GMT', 'content-type': 'application/json', 'transfer-encoding': 'chunked', 'connection': 'keep-alive', 'keep-alive': 'timeout=15', 'vary': 'Accept-Encoding, User-Agent', 'content-security-policy': \"frame-ancestors 'self' https://webvisor.com https://awards.ratingruneta.ru\", 'set-cookie': 'referrer_url=https%3A%2F%2Fkwork.ru%2F; expires=Sun, 05-Apr-2026 22:14:13 GMT; Max-Age=604800; path=/; secure; HttpOnly; SameSite=None', 'cache-control': 'no-cache, private', 'strict-transport-security': 'max-age=15552000', 'x-content-type-options': 'nosniff', 'content-encoding': 'gzip'}\n", + "INFO:kwork_api.client:Login successful: user_id=None, csrf_token=N/A\n", + "DEBUG:kwork_api.client:Login response data: {'success': False, 'error': 'Нужно ввести логин', 'redirect': '', 'recaptcha_show': False, 'error_code': 109}\n", + "DEBUG:kwork_api.client:Login cookies: ['referrer_url']\n", + "DEBUG:httpcore.connection:close.started\n", + "DEBUG:httpcore.connection:close.complete\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "KworkAuthError: Login failed: 404\n" + "KworkAuthError: Login failed: no userId in cookies. Response: {'success': False, 'error': 'Нужно ввести логин', 'redirect': '', 'recaptcha_show': False, 'error_code': 109}\n" ] } ], diff --git a/src/kwork_api/__pycache__/client.cpython-312.pyc b/src/kwork_api/__pycache__/client.cpython-312.pyc index 898a886e3aebc8f02075f9561d00a1723229d1dd..a97bd77bc5b112a6ea3647c455000b547fbe1203 100644 GIT binary patch delta 4751 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 S|9R6Lu~KZL!)WJPNJX&MNj3Z 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