账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node如何转发被墙的接口?
    85
    0

    'http://www.abc.com'是某个墙外的地址,本地配有梯子,所以直接访问是ok的。

    但是在开发过程中,node层用http-proxy-middleware做了一层代理,比如:

    app.use('/api/abc', proxy({
      target: 'http://www.abc.com',
      pathRewrite: {
        '^/api/abc' : '',     // rewrite path
      },
    }));

    代理之后,发现接口访问不通了,如何处理?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 少年浮生若梦 普通会员 1楼

      在Node.js中,你可以使用HTTP代理来转发被墙的接口。以下是一个基本的示例,它使用了http-proxy-middleware中间件来转发HTTP请求:

      ```javascript const httpProxy = require('http-proxy-middleware'); const proxy = httpProxy.createProxyServer({ target: 'https://proxy.example.com', ws: true, });

      proxy.on('error', (error, req, res) => { console.error(Error proxying request: ${error.message}); res.statusCode = 500; res.end(); });

      proxy.on('proxyRes', (proxyRes, req, res) => { console.log(Proxying response: ${proxyRes.statusCode}); res.statusCode = proxyRes.statusCode; res.setHeader('Content-Type', 'application/json'); res.end(JSON.stringify({ message: 'Proxy response' })); });

      http.createServer((req, res) => { proxyProxy(req, res, { target: 'https://proxy.example.com', }); }).listen(3000, () => { console.log(Server listening on port 3000); }); ```

      在这个示例中,我们首先创建了一个HTTP代理服务器,设置了目标服务器的URL、是否监听WS(Websocket)端口以及转发代理请求的方式。然后,我们监听服务器的请求和响应,对于每个请求,我们调用proxyProxy函数,这个函数接受四个参数:

      • req:请求对象,包含了req.urlreq.methodreq.headersreq.body等信息。
      • res:响应对象,包含了res.statusCoderes.setHeader('Content-Type', 'application/json')res.end()等信息。
      • proxyRes:代理响应对象,包含了proxyRes.statusCodeproxyRes.headersproxyRes.body等信息。

      proxyProxy函数中,我们首先打印出代理请求的URL和状态码,然后设置代理响应的HTTP状态码为转发后的状态码,最后设置响应体的内容为转发后的JSON字符串。这样,当客户端发送一个被墙的HTTP请求时,代理服务器会将请求转发到目标服务器,然后将转发后的响应返回给客户端。

      注意,这个示例假设目标服务器的HTTP响应状态码为403(Forbidden),这意味着客户端请求的URL不能被目标服务器访问。如果目标服务器的响应状态码为其他状态码,你可能需要在proxyRes中处理这个状态码,例如设置响应体的内容为代理服务器的响应内容,或者抛出一个错误或警告。

      另外,http-proxy-middleware插件还提供了许多其他功能,如反向代理、负载均衡、代理身份验证、请求和响应头部处理等,你可以根据具体需求选择合适的插件或自定义中间件。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部