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

cri*_*ken 5 javascript proxy http node.js

我通过代理发送一个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);
});
Run Code Online (Sandbox Code Playgroud)

当前,响应为StatusCode:307,消息:Authentication Required

我试图将用户名和密码添加到我的选项中,但是它不起作用:

var options = {
    port: 8080,
    host: 'my.proxy.net',
    username: 'myusername',
    password: 'mypassword',
    path: '/index',
    headers: {
       Host: "http://example.com"
    }
};
Run Code Online (Sandbox Code Playgroud)

附加信息: 我没有太多有关代理的信息,但在另一种情况下,此身份验证方法有效:

npm config set proxy http://username:password@my.proxy.net:8080
Run Code Online (Sandbox Code Playgroud)

Mar*_*ger 5

好的,这适用于我当地的鱿鱼:

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);
});
Run Code Online (Sandbox Code Playgroud)

情侣备注:

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