简体   繁体   中英

How can I use and authorize an http proxy with node.js http.Client

I'm sending an http request over a proxy an need to add username and password to my request. How do I correctly add these values to my options block?

This is my code:

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);
});

Currently the response is StatusCode: 307, Message: Authentication Required .

I tried to add username and password to my options but it doesn't work:

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

Additional Info: I don't have much information about the proxy, but in another case this authentication method worked:

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

Ok, this works with my local squid:

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);
});

Couple notes:

  1. The full URL must be included in the GET line, not just the path, so its not /index.html but http://example.com/index.html
  2. You should also include the host in the host header, so you will have to parse the URL properly

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM