crispychicken
crispychicken

Reputation: 2662

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:[email protected]:8080

Upvotes: 7

Views: 6195

Answers (1)

Martin E. Zulliger
Martin E. Zulliger

Reputation: 849

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

Upvotes: 5

Related Questions