我正在尝试制作一个代理服务器来加载我域下的外部网站。我的目标是让人们访问 myDomain.com/anyDomain.com 并能够使用具有附加功能(注入(inject) JS)的 anyDomain.com。
我尝试使用 Request 包来获取网站的 html,然后将其发送到 Express 中的响应,但这种方法弄乱了网站(相对路径、缺少 CSS、错误的 JS 请求等)。
是否有任何 Node 包可以完成此任务?如果没有,我自己怎么办?
谢谢!
最佳答案
这应该让你开始,它允许你调用 fx http://localhost:6008/www.example.com/hello/world?foo=bar
然后代理 http://www.example.com/hello/world?foo=bar
但如果你要代理其他网页,你会遇到各种各样的问题。
首先,它可能不合法。我不知道有关代理页面和更改它们的规则,您应该查看有关您的特定用例的法律。
其次,由于网页上的很多内容都使用绝对 url(特别是如果内容使用多个域用于 CDN 和 API 之类的东西),这些资源仍然会指向原始目标,这很可能会导致相当头疼
var express = require('express'),
http = require('http'),
url = require('url'),
app = express();
app.get('/:host*', function (request, response, next) {
var proxyurl = url.parse(request.url);
var path = request.params[0];
if (!!proxyurl.search) {
path += proxyurl.search;
}
http.get({
host: request.params.host,
path: path,
headers: {}
}, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
response.end(body);
});
}).on('error', function(e) {
console.log("Got error: ", e);
});
});
app.listen(6008);
关于javascript - 如何在 Express 中代理外部站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30717003/