mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-14 01:00:38 +08:00
* chore(deps): bump https-proxy-agent from 5.0.1 to 6.0.0 Bumps [https-proxy-agent](https://github.com/TooTallNate/proxy-agents/tree/HEAD/packages/https-proxy-agent) from 5.0.1 to 6.0.0. - [Release notes](https://github.com/TooTallNate/proxy-agents/releases) - [Changelog](https://github.com/TooTallNate/proxy-agents/blob/main/packages/https-proxy-agent/CHANGELOG.md) - [Commits](https://github.com/TooTallNate/proxy-agents/commits/HEAD/packages/https-proxy-agent) --- updated-dependencies: - dependency-name: https-proxy-agent dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * chore(deps): bump https-proxy-agent from 5.0.1 to 6.0.0 * test: update test to use WHATWG URL API --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
87 lines
2.7 KiB
JavaScript
87 lines
2.7 KiB
JavaScript
const config = require('@/config').value;
|
|
const { proxyUri, proxyObj, proxyUrlHandler } = require('./unify-proxy');
|
|
const logger = require('./logger');
|
|
const http = require('http');
|
|
const https = require('https');
|
|
|
|
let agent = null;
|
|
if (proxyUri) {
|
|
if (proxyUri.startsWith('http')) {
|
|
const { HttpsProxyAgent } = require('https-proxy-agent');
|
|
agent = new HttpsProxyAgent(proxyUri);
|
|
} else if (proxyUri.startsWith('socks')) {
|
|
const { SocksProxyAgent } = require('socks-proxy-agent');
|
|
agent = new SocksProxyAgent(proxyUri);
|
|
}
|
|
}
|
|
|
|
let proxyWrapper = () => false;
|
|
if (agent) {
|
|
const proxyRegex = new RegExp(proxyObj.url_regex);
|
|
const protocolMatch = (protocolLike) => protocolLike && protocolLike.toLowerCase().startsWith('http');
|
|
|
|
proxyWrapper = (url, options, urlHandler) => {
|
|
if (proxyRegex.test(url)) {
|
|
if ((protocolMatch(options.protocol) || protocolMatch(url)) && (!urlHandler || urlHandler.host !== proxyUrlHandler.host)) {
|
|
options.agent = agent;
|
|
if (proxyObj.auth) {
|
|
options.headers['Proxy-Authorization'] = `Basic ${proxyObj.auth}`;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
}
|
|
|
|
const requestWrapper = (url, options) => {
|
|
let urlHandler;
|
|
try {
|
|
urlHandler = new URL(url);
|
|
} catch (error) {
|
|
// ignore
|
|
}
|
|
options.headers = options.headers || {};
|
|
const headersLowerCaseKeys = Object.keys(options.headers).map((key) => key.toLowerCase());
|
|
|
|
proxyWrapper(url, options, urlHandler) ? logger.info(`Proxy for ${url}`) : logger.debug(`Requesting ${url}`);
|
|
|
|
// ua
|
|
if (!headersLowerCaseKeys.includes('user-agent')) {
|
|
options.headers['user-agent'] = config.ua;
|
|
}
|
|
|
|
if (urlHandler) {
|
|
// referer
|
|
if (!headersLowerCaseKeys.includes('referer')) {
|
|
options.headers.referer = urlHandler.origin;
|
|
}
|
|
// host
|
|
if (!headersLowerCaseKeys.includes('host')) {
|
|
options.headers.host = urlHandler.host;
|
|
}
|
|
}
|
|
};
|
|
|
|
const httpWrap = (func) => {
|
|
const origin = func;
|
|
return function (url, request) {
|
|
if (typeof url === 'object') {
|
|
if (url instanceof URL) {
|
|
requestWrapper(url.toString(), request);
|
|
} else {
|
|
const req = url;
|
|
requestWrapper(req.url || req.href || `${req.protocol}//${req.hostname || req.host}${req.path}`, req);
|
|
}
|
|
} else {
|
|
requestWrapper(url, request);
|
|
}
|
|
return origin.apply(this, arguments);
|
|
};
|
|
};
|
|
|
|
http.get = httpWrap(http.get);
|
|
https.get = httpWrap(https.get);
|
|
http.request = httpWrap(http.request);
|
|
https.request = httpWrap(https.request);
|