You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何将HTTP/HTTPS请求转发至SOCKS5代理

实现方案

直接使用成熟的代理Agent封装库搭配标准HTTP客户端即可,不需要手动实现SOCKSv5协议转换逻辑,可完美支持全类型HTTP请求、自动处理重定向。

依赖选型说明

  • 底层SOCKS协议能力不要直接用裸socks这类基础库,这类库没有封装完整HTTP客户端逻辑,自然无法覆盖POST等带请求体的方法、也不会自动处理301/302重定向
  • 选用socks-proxy-agent作为SOCKS5代理适配层,可直接对接Node.js原生http/https模块以及绝大多数主流HTTP请求库
  • 选用got作为HTTP转发客户端,内置全HTTP方法支持、自动重定向、请求体/响应头透传能力,开箱即用

可直接运行的代码示例

首先安装依赖:

npm i express socks-proxy-agent got

服务代码:

const express = require('express');
const { SocksProxyAgent } = require('socks-proxy-agent');
const got = require('got');

const app = express();
// 替换为实际的SOCKS5代理地址
const socksProxyAgent = new SocksProxyAgent('socks5://127.0.0.1:1080');

// 透传原始请求体,按需调整体积限制
app.use(express.raw({ type: '*/*', limit: '20mb' }));

// 匹配所有请求方法、所有路径,统一做转发
app.all('*', async (req, res) => {
  try {
    // 替换为实际要转发的目标服务根地址
    const targetUrl = `https://your-target-service.com${req.originalUrl}`;
    const upstreamResp = await got(targetUrl, {
      method: req.method,
      agent: {
        http: socksProxyAgent,
        https: socksProxyAgent
      },
      headers: req.headers,
      body: req.body,
      followRedirect: true, // 自动处理301/302等重定向响应
      maxRedirects: 10,
      throwHttpErrors: false
    });

    // 透传上游响应的状态码、头、内容给Nginx
    res.status(upstreamResp.statusCode);
    res.set(upstreamResp.headers);
    res.send(upstreamResp.rawBody);
  } catch (err) {
    res.status(500).send(`Request forward failed: ${err.message}`);
  }
});

app.listen(3000, () => {
  console.log("SOCKS5 forward service running at port 3000");
});

配置注意点

  • 如果目标服务是HTTP协议,只需要把targetUrl的前缀改为http://即可,代理配置不需要调整
  • 如果不想引入got依赖,也可以直接用Node.js原生http.request方法搭配socks-proxy-agent使用,只是需要自行实现重定向跟随、请求体拼接的逻辑
  • 该实现完全兼容Nginx proxy_pass的转发逻辑,会原样透传所有GET/POST/PUT/DELETE等请求的参数、头、内容

内容的提问来源于stack exchange,提问作者POQDEV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:36:30