Прокси-аутентификация в node.js с запросом модуля

Я пытаюсь использовать модуль request в моем приложении node.js, и мне нужно настроить параметры прокси-сервера с помощью проверки подлинности.

Мои настройки выглядят примерно так:

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

Как я могу настроить свою конфигурацию прокси, когда я делаю запрос? Может ли кто-нибудь дать мне пример? спасибо

Ответы

Ответ 1

Вот пример настройки (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) {
  ...
})

Ответ 2

Принятый ответ не является неправильным, но я хотел пройти по альтернативе, которая удовлетворяла бы немного другой потребности, которую я нашел.

В моем проекте, в частности, есть массив прокси-серверов на выбор, а не один. Поэтому каждый раз, когда я делаю запрос, нет смысла повторно устанавливать объект request.defaults. Вместо этого вы можете просто передать его непосредственно в параметры запроса.

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

reqProxy.getProxy() возвращает строку в эквивалент [protocol]://[username]:[pass]@[address]:[port]

Затем сделайте запрос

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

Надеюсь, это поможет кому-то, кто идет по этому вопросу с той же проблемой. Приветствия.

Ответ 3

proxy paramater берет строку с URL-адресом для вашего прокси-сервера, в моем случае прокси-сервер находился в 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 } 
    })
});