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: {} }; }