web-dev-qa-db-fra.com

authentification proxy dans node.js avec demande de module

J'essaie d'utiliser le module demande dans mon application node.js, et je dois configurer les paramètres de proxy avec l'authentification.

Mes paramètres ressemblent à ceci:

proxy:{
    Host:"proxy.foo.com",
    port:8080,
    user:"proxyuser",
    password:"123"
}

Comment puis-je définir ma configuration de proxy lorsque je fais une demande? Quelqu'un pourrait-il me donner un exemple? Merci

25
Victor

Voici un exemple de configuration ( https://github.com/mikeal/request/issues/894 ):

//...some stuff to get my proxy config (credentials, Host and port)
var proxyUrl = "http://" + user + ":" + password + "@" + Host + ":" + port;

var proxiedRequest = request.defaults({'proxy': proxyUrl});

proxiedRequest.get("http://foo.bar", function (err, resp, body) {
  ...
})
39
Victor

La réponse acceptée n'est pas fausse, mais je voulais transmettre une alternative qui répondait un peu à un besoin différent que j'ai trouvé.

Mon projet en particulier a un éventail de proxys parmi lesquels choisir, pas un seul. Donc, chaque fois que je fais une demande, cela n'a pas beaucoup de sens de réinitialiser l'objet request.defaults. Au lieu de cela, vous pouvez simplement le transmettre directement aux options de demande.

var reqOpts = {
    url: reqUrl, 
    method: "GET", 
    headers: {"Cache-Control" : "no-cache"}, 
    proxy: reqProxy.getProxy()};

reqProxy.getProxy() renvoie une chaîne à l'équivalent de [protocol]://[username]:[pass]@[address]:[port]

Faites ensuite la demande

request(reqOpts, function(err, response, body){
    //handle your business here
});

J'espère que cela aide quelqu'un qui vient avec le même problème. À votre santé.

19
James LeClair

le paramètre proxy prend une chaîne avec l'url de votre serveur proxy, dans mon cas le serveur proxy était à http://127.0.0.1:8888

request({ 
    url: 'http://someurl/api',
    method: 'POST',
    proxy: 'http://127.0.0.1:8888',
    headers: {
        'Content-Length': '2170',
        'Cache-Control': 'max-age=0'
    },
    body: body
  }, function(error, response, body){
    if(error) {
        console.log(error);
    } else {
      console.log(response.statusCode, body);
    }

    res.json({ 
      data: { body: body } 
    })
});
8
svnm