Javascript 如何通过node.js http.Client使用和授权http代理

Javascript 如何通过node.js http.Client使用和授权http代理,javascript,node.js,http,proxy,Javascript,Node.js,Http,Proxy,我正在通过代理发送http请求,需要在请求中添加用户名和密码。如何将这些值正确添加到选项块 这是我的代码: var http = require('http'); var options = { port: 8080, host: 'my.proxy.net', path: '/index', headers: { Host: "http://example.com" } }; http.get(options, function(res) { console

我正在通过代理发送http请求,需要在请求中添加用户名和密码。如何将这些值正确添加到选项块

这是我的代码:

var http = require('http');

var options = {
  port: 8080,
  host: 'my.proxy.net',
  path: '/index',
  headers: {
   Host: "http://example.com"
  }
};


http.get(options, function(res) {
  console.log("StatusCode: " + res.statusCode + " Message: " + res.statusMessage);
});
当前响应为状态代码:307,消息:需要身份验证

我尝试将用户名和密码添加到我的选项中,但无效:

var options = {
    port: 8080,
    host: 'my.proxy.net',
    username: 'myusername',
    password: 'mypassword',
    path: '/index',
    headers: {
       Host: "http://example.com"
    }
};
其他信息: 我没有太多关于代理的信息,但在另一种情况下,这种身份验证方法有效:

npm config set proxy http://username:password@my.proxy.net:8080

好的,这对我当地的鱿鱼有效:

var http = require('http');

function buildAuthHeader(user, pass) {
    return 'Basic ' + new Buffer(user + ':' + pass).toString('base64');
}

proxy = 'localhost';
proxy_port = 3128;
host = 'www.example.com';
url = 'http://www.example.com/index.html';
user = 'potato';
pass = 'potato';

var options = {
    port: proxy_port,
    host: proxy,
    path: url,
    headers: {
        Host: host,
       'Proxy-Authorization': buildAuthHeader(user, pass),
    }
};

http.get(options, function(res) {
  console.log("StatusCode: " + res.statusCode + " Message: " + res.statusMessage);
});
注意事项:

  • 完整的URL必须包含在GET行中,而不仅仅是路径,因此它不是/index.html,而是
  • 您还应该在主机头中包含主机,因此必须正确解析URL

  • 这实际上取决于您要使用的代理类型以及它支持的身份验证方案的类型,您是否有关于该代理的更多信息?它在头中没有主机的情况下工作。我为什么需要它?原则上它是强制性的,但如果没有它,它就是一个自由的世界老实说,如果我是你,我会把它包括在内。但这取决于代理及其实现……服务器似乎没有对主机参数做出反应。即使我只是写“foo”而不是正确的主机,它也能工作……也许他们只是忽略了它。它的实现取决于。正如我所说,理论上,这是强制性的,代理必须检查它,但可能编写它的人决定忽略主机头,而使用URL。这是有意义的,因为它是多余的,但这是标准。。。例如,Firefox浏览器在与代理交谈时同时包含完整URL和主机标题。