diff --git a/lib/helper/notify.js b/lib/helper/notify.js index 397c5c9b3..f28fec57c 100644 --- a/lib/helper/notify.js +++ b/lib/helper/notify.js @@ -495,8 +495,8 @@ function tgBotNotify(text, desp) { } if (TG_PROXY_HOST && TG_PROXY_PORT) { options.proxy = { - hostname: TG_PROXY_HOST, - port: TG_PROXY_PORT * 1 + url: "http://" + TG_PROXY_HOST + TG_PROXY_PORT, + auth_headers: [] } } send(options) diff --git a/lib/net/http.js b/lib/net/http.js index fb18b2e65..37e8e4e05 100644 --- a/lib/net/http.js +++ b/lib/net/http.js @@ -20,12 +20,16 @@ * @property {boolean} [redirect] 是否重定向 * @property {number} [retry_times] 重试次数 * + * @typedef ProxyConfig + * @property {string} url https?://{IP}:{PORT} + * @property {[[string, string]]} auth_headers [[k,v],[k,v]] + * * @typedef {object} RequestOptions Http请求选项 * @property {string} [method] 请求方法 * @property {string} url 完整链接 * @property {boolean} [stream] 是否流式数据 * @property {RequestConfig} [config] 设置 - * @property {string} [proxy] HTTP代理 IP:PORT + * @property {ProxyConfig} [proxy] HTTP代理 IP:PORT * @property {Object.} [query] 查询选项 * @property {Object. | string} [contents] 内容 * @property {HttpHeaders} [headers] 请求头 @@ -34,7 +38,9 @@ */ const { request: http_request } = require('http'); +const { HttpProxyAgent } = require('http-proxy-agent'); const { request: https_request } = require('https'); +const { HttpsProxyAgent } = require('https-proxy-agent'); const { stringify } = require('querystring'); /**默认编码 */ @@ -64,7 +70,10 @@ function send(detail) { const { timeout, wait, retry, redirect, retry_times } = config; const thisURL = new URL(url) , content = formatContents(headers["content-type"], contents) - , request = (thisURL.protocol === 'https:') && !proxy ? https_request : http_request; + , request = (thisURL.protocol === 'https:') ? https_request : http_request; + /** + * @type {import("https").RequestOptions} + */ let options = { timeout, method: method.toUpperCase(), @@ -80,9 +89,13 @@ function send(detail) { options.headers['content-length'] = Buffer.byteLength(content, 'utf-8').toString(); } if (proxy) { - options.headers.host = thisURL.host; - options.path = thisURL.href; - [options.host, options.port] = proxy.split(':'); + options.agent = (thisURL.protocol === 'https:') + ? new HttpsProxyAgent(proxy.url) + : new HttpProxyAgent(proxy.url); + for (const ah of proxy.auth_headers) { + options.headers[ah[0]] = ah[1] + } + options.rejectUnauthorized = false } const req = request(options, res => { let protodata = ''; diff --git a/package.json b/package.json index 48bf22bfe..73819727c 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,8 @@ }, "dependencies": { "chalk": "^4.1.2", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", "nodemailer": "^6.7.0" } -} +} \ No newline at end of file