Core Features: - Async API client for Kwork.ru (45+ endpoints) - Pydantic models for type-safe responses - Comprehensive error handling (KworkAuthError, KworkApiError, etc.) - 93% test coverage (57 unit tests) CI/CD Pipeline: - 3 parallel jobs: lint, test, security - Ruff for linting/formatting (150x faster than flake8) - MyPy for static type checking - pip-audit for security scanning - Pre-commit hooks for code quality E2E Testing: - Login/logout authentication - Session restoration - All endpoints tested against real API Documentation: - API reference with examples - Usage guide - Contributing guidelines Based on HAR analysis (mitmproxy + har-analyzer skill): - Correct endpoints: api.kwork.ru - Proper authentication: Basic auth + cookies - Form-urlencoded login payload
6.8 KiB
HAR Endpoints Mapping
Сопоставление endpoints из client.py с реальными endpoints из HAR файла.
📊 Сопоставление endpoints
✅ Работающие endpoints (совпадают с HAR)
| client.py Endpoint | HAR Endpoint | Status | Notes |
|---|---|---|---|
/projects |
POST /projects |
✅ 200 | GET в HAR, POST в client.py |
/api/validation/checktext |
N/A | ❓ | Нет в HAR - возможно не использовался |
❌ Неработающие endpoints (нужно исправить)
| client.py Endpoint | HAR Endpoint (реальный) | Status | Как исправить |
|---|---|---|---|
/catalogMainv2 |
GET /categories/{slug} |
❌ 404 | Использовать GET /categories/{slug} или найти JSON API |
/getKworkDetails |
GET /projects/{id}/view |
❌ 404 | Использовать GET /projects/{id}/view |
/userReviews |
POST /user/get_reviews |
❌ 404 | ✅ Исправить на /user/get_reviews |
/cities |
N/A | ❌ 404 | Нет в HAR - возможно через HTML страницу |
/countries |
N/A | ❌ 404 | Нет в HAR - возможно через HTML страницу |
/user |
GET /user/{username} |
❌ 404 | ✅ Исправить на /user/{username} |
🔍 Детальный анализ
1. Каталог кворков
Текущий (не работает):
POST /catalogMainv2 # ❌ 404 Not Found
Реальный из HAR:
GET /categories/design # ✅ 200 OK
GET /projects # ✅ 200 OK
Проблема: HAR показывает HTML страницы, не JSON API.
Решение: Нужно найти JSON API endpoint или парсить HTML.
Как найти:
- Открыть DevTools → Network → XHR/Fetch
- Перейти на https://kwork.ru/categories/design
- Искать JSON запросы с данными кворков
- Или искать в HAR файлы с "kworks", "catalog", "list"
2. Детали кворка
Текущий (не работает):
POST /getKworkDetails # ❌ 404 Not Found
Реальный из HAR:
GET /projects/3127023/view # ✅ 200 OK
Проблема: HAR показывает HTML страницу проекта.
Решение: Использовать GET /projects/{id}/view и парсить HTML.
Как найти JSON API:
- Открыть DevTools → Network → XHR/Fetch
- Перейти на https://kwork.ru/projects/{id}/view
- Искать JSON запросы
3. Отзывы пользователя
Текущий (не работает):
POST /userReviews # ❌ 404 Not Found
Реальный из HAR:
POST /user/get_reviews # ✅ 200 OK
Payload: {"userId":126921,"type":"positive"}
Решение: ✅ Исправить endpoint на /user/get_reviews
4. Информация о пользователе
Текущий (не работает):
POST /user # ❌ 404 Not Found
Реальный из HAR:
GET /user/jtjagomega # ✅ 200 OK (HTML страница)
GET /user/alexey-liss # ✅ 200 OK (HTML страница)
POST /api/user/checknotify # ✅ 200 OK (JSON API, уведомления)
Проблема: Kwork НЕ предоставляет JSON API для user info!
Решение:
- Для профиля:
GET /user/{username}+ парсинг HTML - Для уведомлений:
POST /api/user/checknotify(уже реализовано)
В client.py сейчас:
# Временно используем checknotify как placeholder
return await self.client._request("POST", "/api/user/checknotify")
5. Справочные данные (города, страны)
Текущие (не работают):
POST /cities # ❌ 404 Not Found
POST /countries # ❌ 404 Not Found
В HAR: Нет таких endpoints.
Проблема: Возможно данные встроены в HTML или загружаются через JavaScript.
Как найти:
- Открыть DevTools → Network
- Перейти на страницу с формой (например, настройки)
- Искать запросы с "cities", "countries", "regions"
- Или искать в исходном коде страницы
<script>с данными
Альтернатива: Парсить HTML страницу с формами.
🛠 План исправлений
Приоритет 1 (есть в HAR):
- ✅
/userReviews→/user/get_reviews - ✅
/user→/user/{username}
Приоритет 2 (нужно искать):
- 🔍
/catalogMainv2→ искать JSON API или парсить HTML - 🔍
/getKworkDetails→ использовать/projects/{id}/view - 🔍
/cities,/countries→ искать в HTML или JavaScript
🔬 Как искать новые endpoints
Метод 1: DevTools Network Tab
- Открыть https://kwork.ru
- DevTools (F12) → Network → XHR/Fetch
- Выполнить действие (поиск, просмотр кворка и т.д.)
- Искать JSON запросы
Метод 2: Анализ HAR файла
cd /root
python3 << 'EOF'
import json
with open('kwork-dump.har') as f:
har = json.load(f)
# Искать конкретные endpoints
for entry in har['log']['entries']:
url = entry['request']['url']
if 'catalog' in url or 'kwork' in url or 'review' in url:
print(f"{entry['request']['method']} {url.split('?')[0]}")
EOF
Метод 3: Поиск в JavaScript файлах
# Скачать все JS файлы и искать API endpoints
grep -r "api/" /path/to/js/files/ | grep -v ".map"
Метод 4: Перехват трафика
Использовать mitmproxy для перехвата всех запросов:
mitmproxy --mode transparent --listen-port 8080
📝 Примечания
- HAR файл содержит только запросы которые были сделаны во время записи
- Не все endpoints попали в HAR (нужно дополнительно исследовать)
- HTML vs JSON: Kwork использует смешанный подход - некоторые данные в HTML, некоторые через JSON API
- Динамические endpoints: Некоторые endpoints могут требовать CSRF токены или другие заголовки
Updated: 2026-03-29