2017-05-28 189 views
0

我试图实现一个简单的HTTP代理,它只会尝试在目标主机上执行基本身份验证。NodeJs HTTP代理基本身份验证

到目前为止,我有以下几点:

var http = require('http'); 

const my_proxy = http.createServer(function(request, response) { 
    console.log(request.connection.remoteAddress + ": " + request.method + " " + request.url); 

    const options = { 
      port: 80 
      , host: request.headers['host'] 
      , method: request.method 
      , path: request.url 
      , headers: request.headers 
      , auth : 'real_user:real_password' 
      } 
     }; 

    var proxy_request = http.request(options); 

    proxy_request.on('response', function (proxy_response) { 
     proxy_response.on('data', function(chunk) { 
      response.write(chunk, 'binary'); 
     }); 
     proxy_response.on('end', function() { 
      response.end(); 
     }); 
     response.writeHead(proxy_response.statusCode, proxy_response.headers); 
    }); 

    request.on('data', function(chunk) { 
     proxy_request.write(chunk, 'binary'); 
    }); 

    request.on('end', function() { 
     proxy_request.end(); 
    }); 
}); 
my_proxy.listen(8080); 

然而, “身份验证: 'real_user:real_password'” 似乎并没有做任何事情。也试过:

... 
auth: { 
    user: real_user, 
    pass: real_pass 
} 
... 

回答

0

你产生AUTH头

var username = 'Test'; 
var password = '123'; 
var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64'); 

// auth is: 'Basic VGVzdDoxMjM=' 

var header = {'Host': 'www.example.com', 'Authorization': auth}; 
var request = client.request('GET', '/', header);