支持 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 集成。

相关文章