使用代理ip来规避的做法用nodejs具体要怎么做?

2023-03-18 16:13:48 浏览数 (2)

首先要说明一点,node-proxy-server 链接,适用于普通页面开发,配置简单,node 命令启动、支持跨域。

接着我们往下看:

1.配置

配置接口地址的拦截,以及代理接口的地址。

代码语言:javascript复制
 
   let conifg = {
 
   ‘/xxxx1’: { // 需要拦截的本地请求路径
 
   target: ‘http://xxxxxxxx.com’, // 代理地址
 
 
   port: 80, // 端口,默认80,某些地址可能是8080
 
  
   },
 
 
  ‘/xxxx2’: {
 
 
  target: ‘http://xxxxxxxx.com’,
 
  port: 80,
 
  }
 
   // …other path
  
  };

2.中间代理服务器

主要利用nodejs的 http 和 fs模块,创建一个中间服务器,接受页面请求,再通过中间服务器去请求真实接口,返回数据。

代码语言:javascript复制
  let http = require(‘http’);

 
  let fs = require(‘fs’);
 
  // 创建中间代理层http服务
 

  let app = http.createServer(function (request, response) {
 

  // 主要逻辑:
 
  // 1.拦截请求配置的路径 if(hasProxy(url, request, response))
 
  // 2.普通请求,直接通过
 
  });

3.拦截请求,转发请求

根据配置中的设定的拦截路径,拦截请求,并且转发到真实地址中。

代码语言:javascript复制
 // 判断是否存在代理地址
 
  function hasProxy(url, request, response) {
 
 
  for (const key in conifg) { // 如果存在多个拦截路径
 
  const { target, port } = conifg[key];
 
 
  let info = target.split(‘//’);
 
  let opts = { // 请求参数
 
  protocol: info[0],
 
 
  host: info[1],
 
  port: port || 80,
 
  method: request.method,
 

  path: url,
 
 
  json: true,

  headers: {}
 
  }
 
  proxy(opts, request, response);
 
  return true;
 
  }
 
  return false;
 
  }
 
  // 代理转发
 
  function proxy(opts, request, response) {
 
  // 请求真实代理接口
 
  var proxyRequest = http.request(opts, function (proxyResponse) {
 
  // 代理接口返回数据,写入本地response
 
  proxyResponse.on(‘data’, function (chunk) {
 
  response.write(chunk, ‘binary’);
 
  });
 
 
  // 代理接口结束,通知本地response结束
 
  proxyResponse.on(‘end’, function () {
 
  response.end();
 
  });
 
  response.writeHead(proxyResponse.statusCode, proxyResponse.headers);
 
 
  });
 
 
 
  // 本地接口数据传输,通知代理接口请求
 
 
  request.on(‘data’, function (chunk) {
 
 
  proxyRequest.write(chunk, ‘binary’);
 
  });
 
 
  // 本地请求结束,通知代理接口请求结束
 
  request.on(‘end’, function () {
 
  proxyRequest.end();
 
  });
 
  }

4.普通资源请求

非拦截请求,直接通过。

代码语言:javascript复制
  
 // 普通请求和资源加载
 
  fs.readFile(__dirname   url, function (err, data) {
 
  if (err) {
 
  console.log(‘请求失败’, err);
 
  } else {
 
  response.end(data);

  }

  });

5.建议

爬虫目前的反扒机制,总的来说还是要让作业的时候,让自己看起来是个正常的用户访问,不然都白瞎

未经允许不得转载:肥猫博客 » 使用代理ip来规避的做法用nodejs具体要怎么做?

0 人点赞