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



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

我尝试使用管道请求将响应从 url 发送回给用户,但随后它不会加载图像,因为 html 使用的是相对 url。如何更改链接以使其使用该页面的绝对 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);
}
});
});

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

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());
}
});
});

最新更新