Proxying requests in Node
node.js, proxy
Solution
Looking at https://stackoverflow.com/a/32704647/1587329, the only difference is that it uses a different target parameter:
var http = require('http');
var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
http.createServer(function(req, res) {
proxy.web(req, res, { target: 'http://www.google.com' });
}).listen(3000);
This would explain the `Invalid host` error: you need to pass a host as the `target` parameter, not the whole URL. Thus, the following might work:
options = {
ignorePath: true,
changeOrigin: false
}
var proxy = httpProxy.createProxyServer({options});
router.get(function(req, res) {
var url = req.body.url;
proxy.web(req, res, { target: url.protocol + '//' + url.host });
});
For the URL object, see the NodeJS website.
Problem
I need to be able to offer replica sites (to www.google.com, www.facebook.com, etc. any site) through my node server. I found this library: https://github.com/nodejitsu/node-http-proxy And I used the following code when proxying requests: ``` options = { ignorePath: true, changeOrigin: false } var proxy = httpProxy.createProxyServer({options}); router.get(function(req, res) { proxy.web(req, res, { target: req.body.url }); }); ``` However, this configuration causes an error for most sites. Depending on the site, I'll get an `Unknown service` error coming from the target url, or an `Invalid host`... something along those lines. However, when I pass ``` changeOrigin: true ``` I get a functioning proxy service, but my the user's browser gets redirected to the actual url of their request, not to mine (so if `req.body.url = http://www.google.com`, the request will go to `http://www.google.com`) How can I make it so my site's url gets shown, but so that I can exactly copy whatever is being displayed? I need to be able to add a few JS files to the request, which I'm doing using another library. For clarification, here is a summary of the problem: The user requests a resource that has a `url` property This `url` is in the form of `http://www.example.com` My server, running on `www.pv.com`, need to be able to direct the user to `www.pv.com/http://www.example.com` The HTTP response returned alongside `www.pv.com/http://www.example.com` is a full representation of `http://www.example.com`. I need to be able to add my own Javascript/HTML files in this response as well.