Как я могу использовать прокси-сервер http с node.js http.Client? - PullRequest
125 голосов
/ 05 октября 2010

Я хочу сделать исходящий HTTP-вызов из node.js, используя стандарт http.Client.Но я не могу подключиться к удаленному серверу напрямую из моей сети, и мне нужно пройти через прокси.

Как мне указать node.js использовать прокси?

Ответы [ 17 ]

1 голос
/ 26 мая 2016

Ответ Имскулла почти сработал для меня, но мне пришлось внести некоторые изменения.Единственное реальное изменение - это добавление имени пользователя, пароля и установка rejectUnauthorized в false.Я не мог комментировать, поэтому я добавил это в ответ.

Если вы запустите код, он получит заголовки текущих новостей в Hacker News, согласно этому уроку: http://smalljs.org/package-managers/npm/

var cheerio = require('cheerio');
var request = require('request');

request({
    'url': 'https://news.ycombinator.com/',
    'proxy': 'http://Username:Password@YourProxy:Port/',
    'rejectUnauthorized': false
}, function(error, response, body) {
    if (!error && response.statusCode == 200) {
        if (response.body) {
            var $ = cheerio.load(response.body);
            $('td.title a').each(function() {
                console.log($(this).text());
            });
       }
    } else {
        console.log('Error or status not equal 200.');
    }
});
0 голосов
/ 28 ноября 2017

используйте 'https-proxy-agent', как это

var HttpsProxyAgent = require('https-proxy-agent');
var proxy = process.env.https_proxy || 'other proxy address';
var agent = new HttpsProxyAgent(proxy);

options = {
    //...
    agent : agent
}

https.get(options, (res)=>{...});
0 голосов
/ 06 апреля 2017

Для использования прокси с https я попробовал совет на этом сайте (используя зависимость https-proxy-agent ), и у меня это сработало:

http://codingmiles.com/node-js-making-https-request-via-proxy/

0 голосов
/ 29 декабря 2010

http://groups.google.com/group/nodejs/browse_thread/thread/d5aadbcaa00c3f7/12ebf01d7ec415c3?lnk=gst&q=proxy#12ebf01d7ec415c3

Судя по ответам из этой темы, вы можете использовать proxychains запустить node.js через прокси-сервер:
$ proxychains /path/to/node application.js

Лично я не смог установить ни одну из версий proxychains в среде Cygwin / Windows , поэтому не смог ее протестировать.

Кроме того, они также говорили об использовании connect-proxy , но я не смог найти никакой документации о том, как это сделать.

Короче, я все еще застрял, но, возможно, кто-то может использовать эту информацию, чтобы найти подходящий обходной путь.

0 голосов
/ 03 мая 2018

Если у вас есть Basic http схема аутентификации , вам нужно сделать строку base64 myuser:mypassword, а затем добавить «Basic» в начале.Это значение заголовка Proxy-Authorization , вот пример:

var Http = require('http');

var req = Http.request({
    host: 'myproxy.com.zx',
    port: 8080,
    headers:{"Proxy-Authorization": "Basic bXl1c2VyOm15cGFzc3dvcmQ="},
    method: 'GET',
    path: 'http://www.google.com/'
    }, function (res) {
        res.on('data', function (data) {
        console.log(data.toString());
    });
});

req.end();

В nodejs вы можете использовать Buffer для кодирования

var encodedData = Buffer.from('myuser:mypassword').toString('base64');

console.log(encodedData);

Например, в браузерах вы можете кодировать в base64 с помощью btoa () , что полезно при запросах ajax в браузере без настроек прокси, выполняющих запрос с использованием прокси.

var encodedData = btoa('myuser:mypassword')

console.log(encodedData);

Как определить, какая схема принимает прокси-сервер?

Если у нас не настроен настраиваемый DNS (это будетбросить что-то вроде ERR_NAME_NOT_RESOLVED), когда мы выполняем запрос, ответ (код 407) должен сообщить в заголовках ответа, какую схему аутентификации http использует прокси.

0 голосов
/ 04 марта 2019

Я думаю, что есть лучшая альтернатива ответам на 2019 год. Мы можем использовать пакет global-tunnel-ng для инициализации прокси и не загрязнять код, основанный на http или https, везде.Поэтому сначала установите пакет global-tunnel-ng:

npm install global-tunnel-ng

Затем измените свои реализации, чтобы при необходимости инициализировать прокси, как:

const globalTunnel = require('global-tunnel-ng');

globalTunnel.initialize({
  host: 'proxy.host.name.or.ip',
  port: 8080
});
0 голосов
/ 11 октября 2010

Возможно, это не та строка, на которую вы рассчитывали, но вы можете взглянуть на http://github.com/nodejitsu/node-http-proxy, поскольку это может пролить свет на то, как вы можете использовать свое приложение с http.Client.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...