- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
8.7 KiB
Улучшение логирования ошибок прокси-сервера
Дата: 15 октября 2025
Проблема: Ошибка 500 от прокси-сервера без детальной информации в логах
Статус: ✅ Исправлено
Проблема
При ошибке 500 от explorer-proxy.debex.ru в логах сохранялось только короткое сообщение:
2025-10-15 13:51:06 - получили ошибку при выполнении запроса:
Server error: `POST https://explorer-proxy.debex.ru/api/v3/production/sudrf`
resulted in a `500 Internal Server Error` response
НО! Прокси-сервер мог вернуть детальную информацию об ошибке в теле ответа (response body), которая не логировалась.
Почему так было?
Старый код:
} catch (Exception $ex) {
$output = $ex->getMessage(); // ← Только короткое сообщение!
file_put_contents('logs/send2court.log',
date('Y-m-d H:i:s').' - получили ошибку: '.$output.PHP_EOL,
FILE_APPEND);
}
При этом Guzzle в объекте исключения содержит полный HTTP ответ, включая:
- Статус код
- Заголовки
- Тело ответа с деталями ошибки
Решение
Модифицирована функция SendRequest() в файле /include/utils/Debexpert-guzzle.php.
Что добавлено
} catch (Exception $ex) {
// Сохраняем короткое сообщение
$output = $ex->getMessage();
file_put_contents('logs/send2court.log',
date('Y-m-d H:i:s').' - получили ошибку: '.$output.PHP_EOL,
FILE_APPEND);
// 🔍 НОВОЕ: Извлекаем детали из ответа
if ($ex instanceof \GuzzleHttp\Exception\RequestException && $ex->hasResponse()) {
$response = $ex->getResponse();
$statusCode = $response->getStatusCode();
$responseBody = (string) $response->getBody();
// Логируем статус код
file_put_contents('logs/send2court.log',
date('Y-m-d H:i:s').' - HTTP статус код: '.$statusCode.PHP_EOL,
FILE_APPEND);
// Логируем тело ответа
file_put_contents('logs/send2court.log',
date('Y-m-d H:i:s').' - Тело ответа от сервера: '.$responseBody.PHP_EOL,
FILE_APPEND);
// Если JSON - парсим для читаемости
$jsonData = json_decode($responseBody, true);
if (json_last_error() === JSON_ERROR_NONE && !empty($jsonData)) {
file_put_contents('logs/send2court.log',
date('Y-m-d H:i:s').' - Детали ошибки (JSON): '.print_r($jsonData, true).PHP_EOL,
FILE_APPEND);
}
} else {
file_put_contents('logs/send2court.log',
date('Y-m-d H:i:s').' - Тело ответа недоступно (возможно, проблема с соединением)'.PHP_EOL,
FILE_APPEND);
}
}
Что теперь будет в логах
До исправления:
2025-10-15 13:51:06 - непосредственно отправляем запрос. Попытка №1
2025-10-15 13:51:06 - получили ошибку при выполнении запроса: Server error...
2025-10-15 13:51:06 - удален временный файл: /tmp/auth_doc_xxx.pdf
После исправления:
2025-10-XX XX:XX:XX - непосредственно отправляем запрос. Попытка №1
2025-10-XX XX:XX:XX - получили ошибку при выполнении запроса: Server error...
2025-10-XX XX:XX:XX - HTTP статус код: 500
2025-10-XX XX:XX:XX - Тело ответа от сервера: {"error":"Invalid certificate format","details":"..."}
2025-10-XX XX:XX:XX - Детали ошибки (JSON): Array
(
[error] => Invalid certificate format
[details] => Certificate signature verification failed
[timestamp] => 2025-10-XX XX:XX:XX
)
2025-10-XX XX:XX:XX - удален временный файл: /tmp/auth_doc_xxx.pdf
Возможные причины ошибки 500
Теперь мы сможем точно определить причину! Возможные варианты:
1. Проблемы с сертификатом
{
"error": "Certificate validation failed",
"details": "Invalid signature or expired certificate"
}
Решение: Проверить актуальность сертификата в БД
2. Проблемы с форматом данных
{
"error": "Invalid request format",
"field": "fillData.appealDocument.pagesCount",
"message": "Expected integer, got string"
}
Решение: Исправить формат данных в запросе
3. Превышение лимитов
{
"error": "Request too large",
"size": "15MB",
"limit": "10MB"
}
Решение: Оптимизировать размер файлов
4. Проблемы на стороне сервера
{
"error": "Internal server error",
"message": "Temporary unavailable, please retry later"
}
Решение: Повторить запрос позже или связаться с техподдержкой
5. Проблемы с авторизацией
{
"error": "Authentication failed",
"message": "Invalid or expired session cookies"
}
Решение: Обновить cookies
Результаты проверки
Дата: 15 октября 2025, 16:41-16:43
Проект: 390657 (Агеев / ООО СКИЛБОКС)
✅ Проблема ошибки 500 РЕШЕНА!
Оказалось, что ошибка 500 была следствием проблемы со скачиванием файлов с #:
-
До исправления:
- 5 файлов с
#в имени не скачивались (HTTP 403) - В суд отправлялось только 16 из 21 файлов
- Прокси-сервер обнаруживал несоответствие (JSON указывает 21 файл, реально 16)
- Результат: ошибка 500 ❌
- 5 файлов с
-
После исправления:
- Все 21 файл скачались успешно (# → %23)
- Полный пакет документов отправлен в суд
- Результат: получен регистрационный номер 41RS0001-201-25-0001140 ✅
Вывод
Улучшенное логирование реализовано и готово к использованию, но в данном конкретном случае не потребовалось - исправление URL-кодирования решило обе проблемы.
При возникновении новых ошибок 500 в будущем, улучшенное логирование поможет быстро диагностировать причину.
Как протестировать
Чтобы сразу увидеть детали, можно:
-
Запустить Send2Court вручную для проблемного проекта:
php Send2Court.php?id=390657&processType=201.01&version=Prod -
Проверить логи после ошибки:
tail -n 50 logs/send2court.log | grep -A 10 "получили ошибку" -
Найти строки с деталями:
- "HTTP статус код:"
- "Тело ответа от сервера:"
- "Детали ошибки (JSON):"
Преимущества
✅ Полная диагностика - видим точную причину ошибки
✅ Быстрое решение - не нужно гадать, что пошло не так
✅ История проблем - все детали сохраняются в логах
✅ Обратная совместимость - работает со всеми типами ответов
Примечание: Это дополняет исправление с URL-кодированием символа #. Теперь у нас есть:
- Исправление проблемы со скачиванием файлов (SEND2COURT_S3_URL_FIX.md)
- Детальное логирование ошибок от прокси-сервера (этот документ)