在 Node 的 HTTPS 客户端中使用 SOCKS 代理
将 socks-proxy-agent 附加到 Node 核心 HTTPS 请求,并保留 Node 代理与 fetch 调度器之间的区别。
支持 SOCKS 的代理可以为 Node 的核心 HTTPS 客户端建立目标连接。应用中已安装 socks-proxy-agent 时:
const https = require('node:https');
const { SocksProxyAgent } = require('socks-proxy-agent');
const agent = new SocksProxyAgent('socks5h://proxy.example:1080');
const request = https.get('https://www.example.com/', {
agent,
signal: AbortSignal.timeout(15000),
}, (response) => {
console.log(response.statusCode);
response.on('error', console.error);
response.resume();
});
request.on('error', console.error);
将这个公开 HTTPS 请求的示例端点替换为SOCKS5 代理列表中未经验证的候选地址。回调在打印状态码后会把响应读完;如果应用需要正文,就在那里消费它。代理在其分配的操作中复用,待该客户端策略退役且工作完成后再销毁。
选择在何处解析目标主机名
在 socks-proxy-agent 的 URL 处理中,socks5h 把目标主机名的解析交给代理链路;socks5 则在本地解析。当该名称仅在代理网络中可用时,这一点很重要。
HTTPS URL 保留网站的身份。代理会在 Node 开始向该网站发起 TLS 之前完成 SOCKS 协商。
对于需要用户名/密码的服务,请用针对保留字符的 URI 组件编码把凭据放进代理 URL。不要把完整 URL 留在日志中。目标的 Authorization 头属于网站账户。
此代理适用于 Node 核心的 HTTP/HTTPS 请求 API。Node 的 fetch 使用调度器接口,因此需要单独配置该客户端支持的 SOCKS 集成。