Got 的 agent 对象以目标协议为键。因此,针对 HTTPS URL 的 SOCKS 连接应放在 https 之下,而不是放在名为 socks 的新键下。

对于在 HTTP/1 路径上使用 Got 和 socks-proxy-agent 的现有 ESM 应用:

import got from 'got';
import {SocksProxyAgent} from 'socks-proxy-agent';

const agent = new SocksProxyAgent('socks5h://proxy.example:1080');
const body = await got('https://www.example.org/', {
  http2: false,
  agent: {
    http: agent,
    https: agent,
  },
  timeout: {request: 20000},
}).text();

SOCKS5 代理列表为示例中无需账号的代理 URL 提供候选。同一个 agent 可以同时处理所示的 HTTP 和 HTTPS 条目。它先建立 SOCKS 连接,随后 HTTPS 路径与目标完成 TLS 握手。

在这个 agent 中,socks5h 把目标主机名的解析交给 SOCKS 代理;socks5 则选择本地解析。代理自身的主机名仍须能从 Node 进程访问到。

Got 的 HTTP/2 agent 槽位期望的是另一种接口。不要把该 agent 复制进 agent.http2 并假定它提供 HTTP/2 代理支持。

为同一工作负载复用已配置的 agent,并在其所有者关闭时销毁它。让依赖包版本与应用所用的 Node 运行时保持一致;本示例使用的是具名导出的 SocksProxyAgent。

相关文章