【发布时间】:2017-08-27 18:06:54
【问题描述】:
我需要能够通过我的节点服务器提供副本站点(到www.google.com、www.facebook.com 等任何站点)。我找到了这个库:
https://github.com/nodejitsu/node-http-proxy
我在代理请求时使用了以下代码:
options = {
ignorePath: true,
changeOrigin: false
}
var proxy = httpProxy.createProxyServer({options});
router.get(function(req, res) {
proxy.web(req, res, { target: req.body.url });
});
但是,此配置会导致大多数网站出错。根据站点的不同,我会收到来自目标 url 的 Unknown service 错误,或 Invalid host... 类似的内容。但是,当我通过
changeOrigin: true
我得到了一个正常运行的代理服务,但我的用户浏览器被重定向到他们请求的实际 url,而不是我的(所以如果req.body.url = http://www.google.com,请求将转到http://www.google.com)
我怎样才能让它显示我的网站的网址,但这样我就可以准确地复制正在显示的任何内容?我需要能够向请求中添加一些 JS 文件,而我正在使用另一个库。
为了澄清,这里是问题的摘要:
用户请求具有
url属性的资源这个
url的形式是http://www.example.com我的服务器,在
www.pv.com上运行,需要能够直接 用户www.pv.com/http://www.example.com同时返回的 HTTP 响应
www.pv.com/http://www.example.com是http://www.example.com。我需要能够添加我自己的 此响应中的 Javascript/HTML 文件也是如此。
【问题讨论】:
-
您的代理以什么形式接收传入请求?如果用户想打开网站
http://example.com/somepage.html,你会得到什么?这只是对http://yourproxy.somedomain/?url=http://example.com/somepage.html的简单HTTP GET 请求吗?或者究竟是什么? -
@SergGr 这不是用户访问代理的一种方式。然而,一种方法是服务器在数据库中获取包含
url字段的项目,其中包含将在代理中使用的 url。 url没有编码,所以格式为http://example.com/somepage.html -
对不起,但是如果这不是简单意义上的代理,为什么不把你真正的问题变成一个问题呢?是否有任何传入的 HTTP 请求?它应该是来自远程服务器的响应的服务器还是应该对远程服务器的响应进行后处理?
-
@SergGr 我希望我的编辑澄清了这个问题
-
@db2791 这个链接对你有帮助stackoverflow.com/questions/42156282/…