From a4127509af225faafd039d97edafc710399aa5c6 Mon Sep 17 00:00:00 2001
From: theluyuan <1162963624@qq.com>
Date: Fri, 31 Oct 2025 09:56:31 +0800
Subject: [PATCH] Enhance ProxyManager and ProxyValidator to display detailed
response information, including status codes, response data, and headers.
Implement response data truncation for better readability. Update validation
logic to capture and return response details in case of errors.
---
public/js/proxies.js | 44 ++++++++++++++++++++++++++++++++
src/services/validator.js | 53 ++++++++++++++++++++++++++++++++++++---
2 files changed, 93 insertions(+), 4 deletions(-)
diff --git a/public/js/proxies.js b/public/js/proxies.js
index 8996b82..3d7ea01 100644
--- a/public/js/proxies.js
+++ b/public/js/proxies.js
@@ -333,6 +333,42 @@ class ProxyManager {
document.getElementById('validationStatus').textContent = '验证完成';
// 显示结果
+ let responseResultHtml = '';
+
+ if (result.data.responseStatus !== null && result.data.responseStatus !== undefined) {
+ responseResultHtml = `
+
+ 响应结果:
+ 状态码: ${result.data.responseStatus}
+ `;
+
+ if (result.data.responseData) {
+ // 限制显示长度,避免内容过长
+ let displayData = result.data.responseData;
+ const maxLength = 300;
+ if (displayData.length > maxLength) {
+ displayData = displayData.substring(0, maxLength) + '... (内容已截断,完整内容请查看日志)';
+ }
+
+ responseResultHtml += `
+ 响应内容:
+ ${this.escapeHtml(displayData)}
+ `;
+ }
+
+ if (result.data.testUrl) {
+ responseResultHtml += `
+ 测试URL: ${result.data.testUrl}
+ `;
+ }
+ } else if (result.data.error) {
+ responseResultHtml = `
+
+ 响应结果:
+ 错误: ${result.data.error}
+ `;
+ }
+
document.getElementById('validationResults').innerHTML = `
验证结果: ${result.data.isValid ? '成功' : '失败'}
@@ -340,6 +376,7 @@ class ProxyManager {
响应时间: ${result.data.responseTime}ms
${result.data.error ? `
错误信息: ${result.data.error}
` : ''}
+ ${responseResultHtml}
`;
// 延迟刷新列表
@@ -581,6 +618,13 @@ class ProxyManager {
return icons[type] || 'info-circle-fill';
}
+ escapeHtml(text) {
+ if (!text) return '';
+ const div = document.createElement('div');
+ div.textContent = text;
+ return div.innerHTML;
+ }
+
convertToCSV(data) {
if (!data || data.length === 0) return '';
diff --git a/src/services/validator.js b/src/services/validator.js
index 37a5e4d..f7c4465 100644
--- a/src/services/validator.js
+++ b/src/services/validator.js
@@ -94,13 +94,32 @@ class ProxyValidator {
console.log(`✓ 代理 ${ip}:${port} 第 ${attemptNumber} 次尝试验证成功,响应时间: ${responseTime}ms`);
}
+ // 提取响应信息用于显示
+ let responseData = '';
+ let responseStatus = response.status;
+ try {
+ // 只取响应数据的前500个字符,避免数据过大
+ const dataStr = typeof response.data === 'string'
+ ? response.data
+ : JSON.stringify(response.data);
+ responseData = dataStr.substring(0, 500);
+ if (dataStr.length > 500) {
+ responseData += '... (已截断)';
+ }
+ } catch (e) {
+ responseData = '无法解析响应内容';
+ }
+
const result = {
ip: ip,
port: parseInt(port),
isValid: true,
responseTime: responseTime,
error: null,
- testUrl: testUrl
+ testUrl: testUrl,
+ responseStatus: responseStatus,
+ responseData: responseData,
+ responseHeaders: response.headers || {}
};
// 更新数据库中的验证结果(如果需要)
@@ -124,13 +143,33 @@ class ProxyValidator {
}
lastError = new Error('响应内容验证失败');
+ // 提取响应信息
+ let responseData = '';
+ let responseStatus = response ? response.status : null;
+ try {
+ if (response && response.data) {
+ const dataStr = typeof response.data === 'string'
+ ? response.data
+ : JSON.stringify(response.data);
+ responseData = dataStr.substring(0, 500);
+ if (dataStr.length > 500) {
+ responseData += '... (已截断)';
+ }
+ }
+ } catch (e) {
+ responseData = '无法解析响应内容';
+ }
+
lastResult = {
ip: ip,
port: parseInt(port),
isValid: false,
responseTime: responseTime,
error: '响应内容验证失败',
- testUrl: testUrl
+ testUrl: testUrl,
+ responseStatus: responseStatus,
+ responseData: responseData,
+ responseHeaders: response ? (response.headers || {}) : {}
};
// 如果还有重试机会,继续尝试
@@ -147,7 +186,10 @@ class ProxyValidator {
isValid: false,
responseTime: responseTime,
error: error.message,
- testUrl: testUrl
+ testUrl: testUrl,
+ responseStatus: null,
+ responseData: null,
+ responseHeaders: {}
};
if (logResult) {
@@ -184,7 +226,10 @@ class ProxyValidator {
isValid: false,
responseTime: Date.now() - startTime,
error: lastError ? lastError.message : '所有验证尝试都失败',
- testUrl: testUrl
+ testUrl: testUrl,
+ responseStatus: null,
+ responseData: null,
+ responseHeaders: {}
};
}