使用Nodejs的express和request做一个在线代理,修改网页中的所有js链接,cssd地址,img标签地址,如果是相对地址,就加上完整的地址。如果是绝对地址,前面要加代理的网址
时间: 2024-03-01 08:50:35 浏览: 104
用Nodejs搭建服务器访问html、css、JS等静态资源文件
5星 · 资源好评率100%
好的,你可以使用以下代码实现这个功能:
```javascript
const express = require('express');
const request = require('request');
const cheerio = require('cheerio');
const url = require('url');
const app = express();
app.use((req, res, next) => {
const targetUrl = req.query.url;
if (!targetUrl) {
res.status(400).send('Missing URL parameter');
return;
}
request(targetUrl, (err, response, body) => {
if (err) {
res.status(500).send('Error fetching target URL');
return;
}
const $ = cheerio.load(body);
// Modify all script tags
$('script[src]').each((i, elem) => {
const src = $(elem).attr('src');
const absoluteUrl = makeAbsoluteUrl(src, targetUrl, req);
$(elem).attr('src', absoluteUrl);
});
// Modify all link tags
$('link[href]').each((i, elem) => {
const href = $(elem).attr('href');
const absoluteUrl = makeAbsoluteUrl(href, targetUrl, req);
$(elem).attr('href', absoluteUrl);
});
// Modify all image tags
$('img[src]').each((i, elem) => {
const src = $(elem).attr('src');
const absoluteUrl = makeAbsoluteUrl(src, targetUrl, req);
$(elem).attr('src', absoluteUrl);
});
res.send($.html());
});
});
function makeAbsoluteUrl(link, targetUrl, req) {
if (!link) {
return link;
}
const parsedLink = url.parse(link);
if (parsedLink.protocol || parsedLink.hostname) {
return req.protocol + '://' + req.get('host') + '/?url=' + encodeURIComponent(link);
} else {
return url.resolve(targetUrl, link);
}
}
app.listen(3000, () => {
console.log('Proxy server listening on port 3000');
});
```
这个代码与之前的代码非常相似,但它还会修改所有JavaScript、CSS和图像标签的地址。具体来说,它会:
- 修改所有JavaScript文件的地址。
- 修改所有CSS文件的地址。
- 修改所有图像文件的地址。
请注意,这种方法同样可能会破坏一些网站的功能,因为它改变了页面的结构。此外,这种方法也可能会导致性能问题,因为它增加了响应的大小。所以,你需要谨慎使用。
阅读全文