Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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
like image 234
crispychicken Avatar asked Apr 30 '15 14:04

crispychicken


1 Answers

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
like image 172
Martin E. Zulliger Avatar answered Sep 30 '22 04:09

Martin E. Zulliger