使用节点js和express创建Web代理

时间:2017-07-18 09:33:48

标签: javascript node.js express webproxy

我正在尝试使用javascript创建个人网络代理,以便用户可以通过网站浏览互联网。示例http://webproxy.to/

我尝试使用管道请求将响应从网址发送回用户,但是由于html使用的是相对网址,因此它不会加载图片。如何更改链接以使其使用该页面的绝对URL?

app.get('/:url', function (req, res) {
  var url = req.params.url;
  request('https://www.google.com', function (error, response, html) {
    if (!error && response.statusCode == 200) {
      req.pipe(request('https://www.google.com')).pipe(res);
    }
  });
});

1 个答案:

答案 0 :(得分:1)

我认为管道在这种情况下是不可用的,你必须进行修改。 尝试使用这样的东西:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

app.get('/:url', function (req, res) {
  var url = req.params.url;
  request(url, function (error, response, html) {    
    if (!error && response.statusCode == 200) {
      const dom = new JSDOM(html);
      const links = dom.window.document.querySelector('a');
      for(let i = 0; i < links.length; i++) {
         if (!/http/.test(links[i].href) && !/mailto/.test(links[i].href)) {
           links[i].href = `http://${url}${links[i].href}`;
         }
      }
      res.send(dom.serialize());
    }
  });
});