fgjohc / src /ProxyServer.js
isididiidid's picture
Upload 7 files
de9786a verified
import dotenv from 'dotenv';
import chalk from 'chalk';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
dotenv.config({ path: join(dirname(__dirname), '.env') });
const logger = {
info: (message) => console.log(chalk.blue(`[ProxyServer] ${message}`)),
error: (message) => console.error(chalk.red(`[ProxyServer] ${message}`)),
warning: (message) => console.warn(chalk.yellow(`[ProxyServer] ${message}`)),
success: (message) => console.log(chalk.green(`[ProxyServer] ${message}`)),
};
/**
* 简化的代理服务器管理类
*/
class ProxyServer {
constructor() {
this.enabled = process.env.ENABLE_PROXY_SERVER === 'true';
this.proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY || '';
this.isConnected = false;
}
/**
* 启动代理服务器
*/
async start() {
if (!this.enabled) {
logger.info('代理服务器未启用,跳过启动');
return false;
}
if (!this.proxyUrl) {
logger.warning('未设置代理URL (HTTP_PROXY),跳过代理验证');
return false;
}
logger.info('正在验证代理连接...');
try {
const isValid = await this.validateProxyConnection();
if (isValid) {
this.isConnected = true;
logger.success('代理服务连接成功');
return true;
} else {
logger.error('代理服务连接失败');
return false;
}
} catch (error) {
logger.error(`连接代理服务时出错: ${error.message}`);
return false;
}
}
/**
* 验证代理连接
*/
async validateProxyConnection() {
try {
// 修复导入方式
const HttpProxyAgent = (await import('http-proxy-agent')).default;
const fetch = (await import('node-fetch')).default;
const agent = new HttpProxyAgent(this.proxyUrl);
const response = await fetch('https://httpbin.org/ip', {
agent,
timeout: 10000
});
if (response.ok) {
const data = await response.json();
logger.info(`代理连接测试成功,出口IP: ${data.origin}`);
return true;
} else {
logger.error(`代理连接测试失败,状态码: ${response.status}`);
return false;
}
} catch (error) {
logger.error(`代理连接验证失败: ${error.message}`);
return false;
}
}
/**
* 停止代理服务器
*/
stop() {
this.isConnected = false;
logger.success('代理服务已断开');
}
/**
* 获取代理状态
*/
getStatus() {
return {
enabled: this.enabled,
connected: this.isConnected,
proxyConfigured: !!this.proxyUrl
};
}
}
const proxyServer = new ProxyServer();
export { proxyServer };