115 votes

Comment utiliser http.client dans Node.js s'il existe une autorisation de base

Comme dans le titre, comment je fais ça? Voici mon code:

 var http = require('http');
var client = http.createClient(80, 'www.example.com'); // to access this url i need to put basic auth.

var request = client.request('GET', '/',
  {'host': 'www.example.com'});
request.end();
request.on('response', function (response) {
  console.log('STATUS: ' + response.statusCode);
  console.log('HEADERS: ' + JSON.stringify(response.headers));
  response.setEncoding('utf8');
  response.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});
 

295voto

Ivo Wetzel Points 27802

Vous devez définir le champ Authorization dans l'en-tête.

Il contient le type d'authentification, Basic dans ce casee et la combinaison username:password qui est encodée en Base64:

 var username = 'Test';
var password = '123';
var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64');

// auth is: 'Basic VGVzdDoxMjM='

var header = {'Host': 'www.example.com', 'Authorization': auth};
var request = client.request('GET', '/', header);
 

67voto

Sujay Points 884

Vous pouvez utiliser quelque chose de similaire dans Docs API http.request http.request:

 var http = require('http');

var request = http.request({'hostname': 'www.example.com',
                            'auth': 'user:password'
                           }, 
                           function (response) {
                             console.log('STATUS: ' + response.statusCode);
                             console.log('HEADERS: ' + JSON.stringify(response.headers));
                             response.setEncoding('utf8');
                             response.on('data', function (chunk) {
                               console.log('BODY: ' + chunk);
                             });
                           });
request.end();
 

13voto

Husky Points 2221

Une solution plus simple consiste à utiliser le format utilisateur: pass @ host directement dans l'URL.

Utilisation de la bibliothèque de demandes :

 var request = require('request'),
    username = "john",
    password = "1234",
    url = "http://" + username + ":" + password + "@www.example.com";

request(
    {
        url : url
    },
    function (error, response, body) {
        // Do more stuff with 'body' here
    }
);
 

J'ai aussi écrit un petit article sur ce blog .

9voto

vrtis Points 126

pour ce que ça vaut, j'utilise node.js 0.6.7 sur OSX et je ne pouvais pas obtenir 'Authorization': auth pour fonctionner avec notre proxy, il devait être réglé sur 'Proxy-Authorization': auth mon code de test est :

 var http = require("http");
var auth = 'Basic ' + new Buffer("username:password").toString('base64');
var options = {
    host: 'proxyserver',
    port: 80,
    method:"GET",
    path: 'http://www.google.com',
    headers:{
        "Proxy-Authorization": auth,
        Host: "www.google.com"
    } 
};
http.get(options, function(res) {
    console.log(res);
    res.pipe(process.stdout);
});
 

2voto

sdqali Points 1304

Je suis tombé sur cela récemment. Le type d'en- tête d' autorisation et d' autorisation à définir dépend du serveur avec lequel le client communique. S'il s'agit d'un serveur Web, vous devez définir l' autorisation et s'il s'agit d'un proxy, vous devez définir l'en - tête Proxy-Authorization.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X