node+pupeteer使用socks5作为代理协议
socks5协议且携带用户名密码作为代理访问固定网站
背景:我没办法改变socks5的协议,也没办法让他不需要账户密码,项目环境是puppeteer+chromium,chromiun不支持socks5协议
用Node的proxy-chain转发socks5(亲测可用)
核心思想:
你在本地(或服务器上)起一个 HTTP 代理网关,
它内部把 Chromium 发来的 HTTP 请求转发到 SOCKS5(带认证)。
这样 Puppeteer 就能“间接”用 SOCKS5 认证代理。
- 安装proxy-chain
npm install proxy-chain
- 创建代理转发服务
// proxy-server.ts
import { ProxyChain } from 'proxy-chain';export async function createProxyServer() {const server = new ProxyChain.Server({port: 3128, // 本地 HTTP 代理端口prepareRequestFunction: ({ request }) => {return {upstreamProxyUrl: 'socks5://username:password@甲方给的代理IP:端口',};},});await server.listen();return server;
}
- 使用
const proxyServer = await createProxyServer();const browser = await puppeteer.launch({headless: true,args: ['--no-sandbox','--disable-setuid-sandbox','--proxy-server=http://127.0.0.1:3128',],});