gre*_*ish 12 javascript http-proxy node.js node-http-proxy
我正在尝试设置一个只转发请求的node-http-proxy.最后,这个代理应该在我通过浏览器访问的每个网站中注入javascript.
现在,大多数页面都被正确转发和显示,但有些页面,例如posterkoenig.ch或 verkehrsclub.ch正在返回空白页面或页面上有错误.两个站点都可以在没有代理的情况下正常运行 我需要更改什么,或者我错过了哪些内容未正确转发?
我是nodejs的新手,甚至不确定我的方法是否有效.
这是我到目前为止所得到的:
var httpProxy = require('http-proxy');
var url = require('url');
httpProxy.createServer(function(req, res, proxy) {
var urlObj = url.parse(req.url);
proxy.proxyRequest(req, res, {
host: urlObj.host,
port: 80,
changeOrigin: true,
enable : { xforward: true }
});
}).listen(9000, function () {
console.log("Waiting for requests...");
});
Run Code Online (Sandbox Code Playgroud)
正如@robertklep建议我删除changeOrigin和重新定义req.headers.host,也req.headers.url
posterkoenig.ch:
现在抛出:
An error has occurred:
{"code":"ENOTFOUND","errno":"ENOTFOUND","syscall":"getaddrinfo"}
Run Code Online (Sandbox Code Playgroud)
verkehrsclub.ch:
首页现在可以使用,但是子页面仍会在页面上抛出错误.
var httpProxy = require('http-proxy');
var url = require('url');
httpProxy.createServer(function(req, res, proxy) {
var urlObj = url.parse(req.url);
req.headers['host'] = urlObj.host;
req.headers['url'] = urlObj.href;
proxy.proxyRequest(req, res, {
host: urlObj.host,
port: 80,
enable : { xforward: true }
});
}).listen(9000, function () {
console.log("Waiting for requests...");
});
Run Code Online (Sandbox Code Playgroud)
rob*_*lep 15
您的第一个问题与changeOrigin:将向Host远程服务器发送包含端口号的标头,并且您提到的两个站点都无法处理.
相反,试试这个:
req.headers.host = urlObj.host;
req.url = urlObj.path;
proxy.proxyRequest(req, res, {
host: urlObj.host,
port: 80,
enable : { xforward: true }
});
Run Code Online (Sandbox Code Playgroud)
至于你的另一个问题,我认为它可能与那些不以UTF-8(.toString()如果你没有通过编码方式将使用的编码)提供内容的网站有关.它会一直发生,还是只发生在一些网站上?
FWIW,harmon是一种中间件,node-http-proxy它提供了一种重写响应的好方法.这可能对你的情况来说太过分了,但它也可能解决你的问题.
编辑:这是一个最小的例子似乎适用于两者posterkoenig.ch和www.verkehrsclub.ch(主页以及子页面):
var httpProxy = require('http-proxy');
var url = require('url');
httpProxy.createServer(function(req, res, proxy) {
var urlObj = url.parse(req.url);
req.headers.host = urlObj.host;
req.url = urlObj.path;
proxy.proxyRequest(req, res, {
host : urlObj.host,
port : 80,
enable : { xforward: true }
});
}).listen(9000, function () {
console.log("Waiting for requests...");
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12262 次 |
| 最近记录: |